2014-12-02 35 views
-1

我有一个表,如下所示:非常非常难的查询和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 
+3

你能更清晰地重新写你的问题?我根本不理解它。 – 2014-12-02 15:41:50

+2

这是sql服务器还是mysql。你们标记了他们两个,他们不是一回事。另外,这并不像你想象的那么难。你有三个不同的结果在这里,每个结果集是一个简单的聚合。 – 2014-12-02 15:41:50

回答

2

您可以使用Cross applyunpivot然后将数据找到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| 
+==+==+ 
1

这是你以前的答案一个group by查询:

select a, sum(b) as b 
from (<previous query here>) a 
group by a; 
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列,然后外部查询不分组/ summin G。