SQL组由NULL组成

时间:2015-01-13 13:57:35

标签: 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

现在我希望按ProductName进行分组,结果如下

ID   ProductID   ProductName  Price
==   =========   ===========  =====
1    XX1           TShirt      30
4    XX2           Shirt       20
5    XX3           Shirt1      30

由于

1 个答案:

答案 0 :(得分: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

如果您想要包含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