这是SQL Server2016。我仅在一个表中具有以下数据:
custID | prodID | title | titleCount | isMasterTitle
--------+--------+--------+-------------+-----------
266 | 191750 | prod01 | 1 | 0
266 | 191750 | prod01 | 4 | 0
266 | 191750 | prod01 | 25 | 0
300 | 20125 | prod02 | 3 | 0
300 | 20125 | prod02 | 15 | 0
我想按custID,prodID和标题分组,并为每个组的每个max()titleCount将isMasterTitle字段更新为1。
所以,我想要以下内容:
custID | prodID | title | titleCount | isMasterTitle
--------+--------+----------+------------+---------------
266 | 191750 | prod01 | 1 | 0
266 | 191750 | prod01 | 4 | 0
266 | 191750 | prod01 | 25 | 1
300 | 20125 | prod02 | 3 | 0
300 | 20125 | prod02 | 15 | 1
我正在尝试以下操作,但在所有titleCount字段中都得到1:
UPDATE [dbo].[_Variations]
SET isMasterTitle = 1
FROM [dbo].[_Variations] v1
INNER JOIN (SELECT custID, prodID, title, MAX(titleCount) AS mtitleCount
FROM [_Variations]
GROUP BY custID,prodID, title) as v2 ON v1.custID = v2.custID and v1.prodID = v2.prodID and v1.title = v2.title and v1.titleCount = v2.mtitleCount
尝试以下操作:
;with cte
as
(
select custID, prodID, title, titleCount, ROW_NUMBER() over (partition by custID, prodID, title order by titleCount desc) rn
from @t
)
update t
set isMasterTitle = 1
from @t t
join cte on t.custID = cte.custID and t.prodID = cte.prodID and t.title = cte.title and t.titleCount = cte.titleCount and rn = 1
select * from @t
您的给定代码也可以正常工作。
请找到db <>提琴手here。