非常非常难的查询和GROUP BY列
问题描述:
我有一个表,如下所示:非常非常难的查询和GROUP BY列
A----B----C----D----F----E
1----2----3-----4----5----6
1----2----3-----4----5----6
1----2----3-----4----5----6
现在我想打一个查询,如下表,表导致的字段值C,d以下的列A, B,列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
答
您可以使用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|
+==+==+
答
这是你以前的答案一个group by
查询:
select a, sum(b) as b
from (<previous query here>) a
group by a;
答
也许这样的事情会做的伎俩:
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列,然后外部查询不分组/ summin G。
你能更清晰地重新写你的问题?我根本不理解它。 – 2014-12-02 15:41:50
这是sql服务器还是mysql。你们标记了他们两个,他们不是一回事。另外,这并不像你想象的那么难。你有三个不同的结果在这里,每个结果集是一个简单的聚合。 – 2014-12-02 15:41:50