SQL устанавливает возрастающее целое число, где значение столбца равно 1 - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть набор данных, который выглядит следующим образом:

Id INT,
Choice VARCHAR,
Order INT

Id + Choice образуют первичный ключ.

В настоящее время многие строки имеют Order = 1.

Что бы я хотел сделать, для каждого Id, если есть несколько строк с этим Id, где Order = 1, установите их равными 1, 2, 3, 4 и т. Д.

Я не могу обработать SQL для этого.

Пример данных:

+----+--------+-------+
| Id | Choice | Order |
+----+--------+-------+
|  4 | hello  |     1 |
|  4 | world  |     1 |
|  4 | test   |     1 |
+----+--------+-------+

станет:

+----+--------+-------+
| Id | Choice | Order |
+----+--------+-------+
|  4 | hello  |     1 |
|  4 | world  |     2 |
|  4 | test   |     3 |
+----+--------+-------+

1 Ответ

0 голосов
/ 17 сентября 2018

Мы можем попробовать использовать ROW_NUMBER здесь с разделом на Id. Что касается порядка в вашей колонке Order, я не вижу никакой логики для того, как вы пронумеровали вещи. В отсутствие этого я использую столбец Choice, чтобы решить, как упорядочить нумерацию строк.

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY Id ORDER BY Choice) rn
    FROM yourTable
    WHERE [Order] = 1
)

UPDATE cte
SET [Order] = rn;

Примечание: пожалуйста, избегайте именования столбцов (таблиц и т. Д.), Используя зарезервированные ключевые слова SQL, такие как ORDER. Вам всегда нужно будет указывать имя этого столбца в квадратных скобках, например: [Order].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...