我有一个代表音乐厅的数据库表,它看起来如下:
列: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
应显示,但在分组时不予考虑。
我该怎么做?
答案 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
答案 1 :(得分:0)
您可以应用MAX
或MIN
折叠行:
SELECT MAX(ActionID), RegionName, MAX(RowNumber), MAX(Price), SUM(Quantity)
FROM my_table
GROUP BY RegionName
如果每个地区有多个ActionID
或RowNumber
或Price
,这显然会变得更加复杂。在这种情况下,只有在您不关心这些多个值中的哪一个时才使用它。