非常非常难以查询和按列分组

时间:2014-12-02 15:38:27

标签: mysql sql sql-server sql-server-2008 tsql

我有一张表格如下:

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

3 个答案:

答案 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 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|
+==+==+

答案 2 :(得分:1)

这是对您之前回答的group by查询:

select a, sum(b) as b
from (<previous query here>) a
group by a;