如何通过多列正确分组数据?

时间:2015-09-08 13:34:34

标签: sql-server-2008

我有一个代表音乐厅的数据库表,它看起来如下:

列:ActionID, RegionName, RowNumber, Price, Quantity

样本数据:

ActionID RegionName   RowNumber   Price Quantity
1         Region1        22       8000    7
1         Region1         -       8000    1
1         Region2        10       5000    2
1         Region2        10       5000    2
1         Region2        10       5000    1

我应该显示按行动ID,地区名称,价格和数量分组的每个地区的总数量的特定地区。

1   Region1   22   8000   8
1   Region2   10   5000   5

正如您所看到的那样,RowNumber应显示,但在分组时不予考虑。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

您可以使用CTE和排名函数,例如ROW_NUMBER

WITH CTE AS
(
   SELECT t.*,
          rn = ROW_NUMBER()OVER(Partition By ActionID, RegionName, Price
                                Order By RowNumber),
          OverallQuantity = SUM(Quantity) OVER (Partition By ActionID, RegionName, Price)
   FROM dbo.TableName t
)
SELECT ActionID, RegionName, RowNumber, Price, Quantity = OverallQuantity
FROM CTE
WHERE RN = 1

结果:

ActionID    RegionName  RowNumber   Price   Quantity
1           Region1      -          8000      8
1           Region2      10         5000      5

Demo

答案 1 :(得分:0)

您可以应用MAXMIN折叠行:

SELECT MAX(ActionID), RegionName, MAX(RowNumber), MAX(Price), SUM(Quantity)
FROM my_table
GROUP BY RegionName

如果每个地区有多个ActionIDRowNumberPrice,这显然会变得更加复杂。在这种情况下,只有在您不关心这些多个值中的哪一个时才使用它。