使用聚合对分组数据进行SQL更新

时间:2017-05-31 12:44:38

标签: sql-server

我试图通过首先按column1对数据进行分组来更新表, 在我需要的每组数据中: 按column2排序数据, 使用column3中的最高值填充Column4(按column2排序) 列1,3,3是varchar,列3是int。 我尝试使用CTE和Top进行更新:

Update a
Set a.col4 = c.Best
From Table1 a,
(Select Top (1) Col3 as Best, Col1, Col2
From Table1
Group By Col1
Order By Col2 DESC) c
where a.Col1 = c.Col1

但它似乎是从表中选择最高值而不是从每个组中选择。有谁知道这里缺少什么或更简单的方法吗?
开始数据:
    Col1 Col2 Col3 Col4
    unit101 11 unit118 NULL
    unit101 13 unit125 NULL
    unit101 12 unit135 NULL
    unit107 11 unit168 NULL
    unit107 10 unit199 NULL

要求的结果:
    Col1 Col2 Col3 Col4
    unit101 11 unit118 unit125
    unit101 13 unit125 unit125
    unit101 12 unit135 unit125
    unit107 11 unit168 unit168
    unit107 10 unit199 unit168

第4列需要具有col3中的值,其中col 2是数据中按col1分组的行的最大值。

2 个答案:

答案 0 :(得分:1)

使用'rank'确定'best'并将其添加到内连接中。下面是一个工作示例,并提供您要求的结果

Execute

答案 1 :(得分:0)

您可以使用CROSS APPLY

Update a
Set a.col4 = c.Best
From Table1 a
 CROSS APPLY (Select Top (1) Col3 as Best, Col1, Col2
              From Table1 t2
              where a.Col1 = t2.Col1
              Order By Col2 DESC) c