SQL Server UPDATE-GROUP BY-MAX

问题描述 投票:0回答:1

这是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
sql-server group-by sql-update max
1个回答
0
投票

尝试以下操作:

;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

© www.soinside.com 2019 - 2024. All rights reserved.