【问题标题】:SQL Server - Update a column if row is the first record in groupSQL Server - 如果行是组中的第一条记录,则更新列
【发布时间】:2010-07-01 03:29:14
【问题描述】:

如何确定每个品牌和类别具有价值的第一行,然后将“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

【问题讨论】:

  • 最早的日期表示第一个吗?
  • 请问这个表的主键是什么。

标签: sql sql-server group-by sql-update


【解决方案1】:

Common table expressions 实际上是可更新的,将 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;

【讨论】:

  • 我遇到一个错误:关键字“组”附近的语法不正确
  • 我们可以在参数中使用group by吗?
  • 现在可以使用了。 :) 不确定是否是因为我将组更改为分区。谢谢!
猜你喜欢
  • 2019-08-21
  • 1970-01-01
  • 1970-01-01
  • 2012-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-14
相关资源
最近更新 更多