2014-12-02 54 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。