SQL分组依据为NULL

-4 sql null

我有一张桌子,像这样:

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)

谢谢

Tim*_*ter 5

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)