我有一张桌子,像这样:
ID ProductID ProductName Price
== ========= =========== =====
1 XX1 TShirt 10
2 XX1 TShirt 10
3 NULL TShirt 10
4 XX2 Shirt 20
5 XX3 Shirt1 30
Run Code Online (Sandbox Code Playgroud)
现在我希望以此为依据ProductName
,结果将如下
ID ProductID ProductName Price
== ========= =========== =====
1 XX1 TShirt 30
4 XX2 Shirt 20
5 XX3 Shirt1 30
Run Code Online (Sandbox Code Playgroud)
谢谢
ProductID
似乎与小组无关,所以不要使用它。要获取所有列,您可以使用CTE和排名函数,例如ROW_NUMBER
:
WITH CTE AS(
SELECT ID,
ProductID,
ProductName,
Price = SUM(Price) OVER (PARTITION BY ProductName),
RN = ROW_NUMBER() OVER (PARTITION BY ProductName ORDER BY ID)
FROM dbo.TableName
)
SELECT CTE.* FROM CTE
WHERE RN = 1
Run Code Online (Sandbox Code Playgroud)
如果要采用包含ProductID
(不包含)的行,请NULL
修改ORDER BY
:
WITH CTE AS(
SELECT ID,
ProductID,
ProductName,
Price = SUM(Price) OVER (PARTITION BY ProductName),
RN = ROW_NUMBER() OVER (PARTITION BY ProductName
ORDER BY CASE WHEN ProductID IS NOT NULL
THEN 0 ELSE 1 END, ID)
FROM dbo.TableName
)
SELECT CTE.* FROM CTE
WHERE RN = 1
Run Code Online (Sandbox Code Playgroud)