Сбросить значения столбцов на основе сортировки - PullRequest
0 голосов
/ 31 октября 2019

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

+-----+------------+-----------+--------------------+
| ID  | EntityName | SortOrder | EntityCollectionId |
+-----+------------+-----------+--------------------+
| 123 | Apples     |         1 |                114 |
| 124 | Beer       |         2 |                114 |
| 125 | Chicken    |         3 |                114 |
| 126 | Tom        |         1 |                115 |
| 127 | Dick       |         2 |                115 |
| 128 | Harry      |         3 |                115 |
+-----+------------+-----------+--------------------+

И я добавляю в эту таблицу следующие строки:

| 129 | Apricots   |         0 |                114 |
| 130 | Bacon      |         0 |                114 |
| 131 | Cheese     |         0 |                114 |

Учитывая, что теперь я хочу сделать зановоSortOrder для всех элементов EntityCollection 114, чтобы EntityName располагал их в алфавитном порядке, как бы я поступил так, не касаясь SortOrder других коллекций?

1 Ответ

2 голосов
/ 31 октября 2019

Вы можете использовать обновляемый cte:

with cte as (
    select 
        sortOrder, 
        row_number() over(partition by EntityCollectionId order by EntityName) rn
    from mytable 
    where EntityCollection = 114
)
update cte set SortOrder = n

Обратите внимание, что предложение where не обязательно обязательно. Если бы только коллекция сущностей 114 имела изменения, то порядок сортировки других записей будет переназначен на то же значение.

Наконец: нет смысла хранить информацию такого типа в таблице. Всякий раз, когда происходят операции модификации данных, вам нужно сканировать таблицу, чтобы переназначить порядок сортировки. Кажется, что было бы проще просто вычислить информацию на лету, когда вам это нужно (обычно используя row_number() в запросе select).

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