第一步是UNPIVOT你的数据:
WITH T AS
( SELECT Sno, Water, Milk
FROM (VALUES (1, 50, 100), (2, 22, 120), (3, 11, 142)) t (Sno, Water, Milk)
)
SELECT upvt.Sno,
upvt.Type,
Upvt.Qnty
FROM T
UNPIVOT
( Qnty
FOR Type IN ([Water], [Milk])
) AS upvt;
这将给:
Sno Type Qnty
1 Water 50
1 Milk 100
2 Water 22
2 Milk 120
3 Water 11
3 Milk 142
然后您可以对该结果应用普通聚合:
WITH T AS
( SELECT Sno, Water, Milk
FROM (VALUES (1, 50, 100), (2, 22, 120), (3, 11, 142)) t (Sno, Water, Milk)
)
SELECT Sno = ROW_NUMBER() OVER(ORDER BY SUM(Upvt.Qnty)),
upvt.Type,
Qnty = SUM(Upvt.Qnty)
FROM T
UNPIVOT
( Qnty
FOR Type IN ([Water], [Milk])
) AS upvt
GROUP BY upvt.Type
ORDER BY Qnty;
给予:
Sno Type Qnty
1 Water 83
2 Milk 362
编辑
根据您的评论,您使用的是 SQL Server 2005,而不是 2008,如下所示是一个完整的工作示例,将在 2005 上工作:
DECLARE @T TABLE (Sno INT, Water INT, Milk INT);
INSERT @T (Sno, Water, Milk) VALUES (1, 50, 100);
INSERT @T (Sno, Water, Milk) VALUES(2, 22, 120);
INSERT @T (Sno, Water, Milk) VALUES(3, 11, 142);
SELECT Sno = ROW_NUMBER() OVER(ORDER BY SUM(Upvt.Qnty)),
upvt.Type,
Qnty = SUM(Upvt.Qnty)
FROM @T AS T
UNPIVOT
( Qnty
FOR Type IN ([Water], [Milk])
) AS upvt
GROUP BY upvt.Type
ORDER BY Qnty;
在 2005 年,我用来创建示例数据的表值构造函数导致错误,与取消透视然后对数据求和的实际查询无关。