我有一张表格如下:
A----B----C----D----F----E
1----2----3-----4----5----6
1----2----3-----4----5----6
1----2----3-----4----5----6
现在我想查询下表中的表格引导下列A,B列的字段值c,d,列F,E中的值以下列A,B,
A----B
1----2
1----2
1----2
3----4
3----4
3----4
5----6
5----6
5----6
现在按A列和总和B列分组。
决赛桌
A----B
1----6
3----12
5----18
答案 0 :(得分:2)
可能这样的事情可以解决问题:
SELECT A, SUM(B) AS B
FROM (
SELECT A, B FROM yourtable
UNION ALL
SELECT C, D FROM yourtable
UNION ALL
SELECT E, F FROM yourtable
) subquery
ORDER BY A
GROUP BY A
子查询/联合内容将您的6列布局转换为2列,然后外部查询进行分组/求和。
答案 1 :(得分:2)
您可以使用Cross apply
来unpivot
数据,然后找到sum
CREATE TABLE #test
(A INT,B INT,C INT,D INT,F INT,E INT)
INSERT #test
VALUES (1,2,3,4,5,6),
(1,2,3,4,5,6),
(1,2,3,4,5,6)
要获得第一个结果,请使用Cross Apply
将列转换为行
SELECT data A,
cname B
FROM #test
CROSS apply (VALUES(b,a),
(d,c),
(e,f)) ca (cname, data) order by A
哪个应该结果
A B
-- --
1 2
1 2
1 2
3 4
3 4
3 4
5 6
5 6
5 6
然后从上面的结果中使用汇总Sum
来查找按B
A
的总和
SELECT data A,
Sum(cname) B
FROM #test
CROSS apply (VALUES(b,a),
(d,c),
(e,f)) ca (cname, data)
GROUP BY data
输出:
+==+==+
|A |B |
+==+==+
|1 |6 |
|3 |12|
|5 |18|
+==+==+
答案 2 :(得分:1)
这是对您之前回答的group by
查询:
select a, sum(b) as b
from (<previous query here>) a
group by a;