Обновление, чтобы получить check_order - PullRequest
1 голос
/ 14 февраля 2011

У меня есть таблица со значениями,

col1     col2     col3 
1         0         ABA
1         0         ABB
1         0         ABC
2         0         BBA
2         0         BBB
2         0         BBC

Я пытаюсь обновить таблицу, чтобы увидеть количество повторений col1, в этом случае col1 повторяется 3 раза, поэтому каждое обновление col2 увеличивается на1.

Требуемый вывод после таблицы обновления

col1     col2     col3 
1         1         ABA
1         2         ABB
1         3         ABC
2         1         BBA
2         2         BBB
2         3         BBC

Ответы [ 2 ]

3 голосов
/ 14 февраля 2011

Простой row_number () -ing должен работать

;with TMP as (
select *, row_number() over (partition by col1 order by col3) as RowNum
from tbl
)
update TMP set col2=RowNum

Где

  • tbl : ваше имя таблицы
  • разбиение по col1 : сбрасывает нумерацию строк для каждой группы col1
  • заказ по col3 : это основа для нумерации в группе col1
1 голос
/ 14 февраля 2011

Предполагая, что вы хотите, чтобы столбец col3 находился в не убывающем порядке, он должен это сделать:

UPDATE MyTable
SET col2=(SELECT COUNT(*) 
          FROM MyTable AS T2 
          WHERE T2.col1=T1.col1 AND T2.col3<=T1.col3)
FROM MyTable AS T1

Вы получите дубликаты в столбце col2, если в столбце col3 есть дубликаты для определенного значения col1.

В случае, если вам интересно, вот довольно подробное (и более дорогое исполнение) решение с использованием функции ранжирования. Он имеет ту же проблему (т. Е. Счет повторяется) для дубликатов в столбце col1 / col3, как и в предыдущем решении:

UPDATE MyTable
SET col2=(
     -- In the following query, DISTINCT merges rank dups caused by col3 dups
     -- SELECT TOP(1) MyRank would also work.
     SELECT DISTINCT MyRank 
     FROM (
      SELECT col3,
              DENSE_RANK() OVER (PARTITION BY col1 ORDER BY col3) AS MyRank
      FROM MyTable
      WHERE col1=UpdatedTable.col1
     ) As RankTable
     WHERE RankTable.col3=UpdatedTable.col3)
FROM MyTable AS UpdatedTable
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...