SQL Server - обновить столбец, если строка является первой записью в группе - PullRequest
0 голосов
/ 01 июля 2010

Как определить первую строку, которая имеет значение для каждого бренда и категории, а затем обновить столбец «FirstValue» как 1, иначе 0?например ожидаемой таблицы

Date   |  Brands  |  Category |  Value  | FirstValue 
Jan 08 |   A      |  1        | 0       |0
Jan 08 |   A      |  2        | 0       |0
Jan 08 |   A      |  3        | 0       |0
Jan 08 |   B      |  1        | 12      |1
Jan 08 |   B      |  2        | 0       |0
Jan 08 |   B      |  3        | 0       |0
Feb 08 |   A      |  1        | 5       |1
Feb 08 |   A      |  2        | 0       |0
Feb 08 |   A      |  3        | 67      |1
Feb 08 |   B      |  1        | 0       |0
Feb 08 |   B      |  2        | 0       |0
Feb 08 |   B      |  3        | 6       |1

1 Ответ

2 голосов
/ 01 июля 2010

Общие табличные выражения фактически обновляемы, и объединение CTE с функциями ранжирования ROW_NUMBER() дает идеальное решение:

with cte as (
 select row_number() over (partition by Brand, Category order by Date) as rn
, FirstValue
from Table)
update cte
set FirstValue = case when rn = 1 then 1 else 0 end;
...