我试图通过首先按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分组的行的最大值。
答案 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