【问题标题】:Aggregating data from multiple columns (similar to a PIVOT table)从多个列聚合数据(类似于 PIVOT 表)
【发布时间】:2012-08-18 02:20:10
【问题描述】:

我有一个包含以下数据的表(在此示例中缩短了):

    C1    C2    C3    C4
=========================
1   0     1     1     0
2   1     1     0     1
3   1     0     1     1
4   1     1     1     1
5   0     0     1     1
6   0     0     0     1

我想创建一个创建查询,它给我以下结果:

    C3    C4
=============
C1   2     3 
C2   2     2

即这四列的组合时:

C1 = 1 & C3 = 1
C1 = 1 & C4 = 1
C2 = 1 & C3 = 1
C2 = 1 & C4 = 1

我已经取得了一些进展,但最终不是我想要的。我已经做到了这一点:http://sqlfiddle.com/#!3/7d3d4/2/0

但我不知道如何让我的查询格式化为我想要的上面的输出。我打算尝试使用PIVOT 表,但很快就放弃了这个想法,因为一旦我需要添加第二条PIVOT 语句,它似乎变得非常复杂(我最终不得不添加更多作为我的示例以上是我需要执行此操作的列数的一个非常基本的示例)。

我错过了什么?

谢谢。

【问题讨论】:

  • 我认为您需要先取消旋转表格,然后以您想要的方式再次旋转它......(在某些示例中工作)

标签: sql-server pivot-table


【解决方案1】:

试试这个:

SELECT 'C1',SUM(CASE WHEN C1=1 AND C3=1 THEN 1 END)AS C3,
            SUM(CASE WHEN C1=1 AND C4=1 THEN 1 END)AS C4
FROM T1
UNION ALL
SELECT 'C2',SUM(CASE WHEN C2=1 AND C3=1 THEN 1 END)AS C3,
            SUM(CASE WHEN C2=1 AND C4=1 THEN 1 END)AS C4
FROM T1


SQL Fiddle Demo

【讨论】:

    【解决方案2】:

    我认为这会给你所要求的结果集

    SELECT COL1, C3, C4
    FROM (
         SELECT SUBSTRING(col,1,2) col1, SUBSTRING(col,3,2) col2, value
         FROM (
               SELECT SUM(c1*c3) as c1c3, SUM(c1*c4) as c1c4, 
                      SUM(c2*c3) as c2c3, SUM(c2*c4) as c2c4
               FROM t1
              ) t 
         UNPIVOT (value FOR col IN (c1c3, c1c4, c2c3, c2c4)) AS u
        ) data
    PIVOT (SUM(value) FOR col2 IN ([c3], [c4])) pvt
    

    我开始编写一个给出总数的查询,结果集如下所示

    c1c3     c1c4     c2c3    c2c4
     2        3        2       2
    

    此时您可能只需使用此查询即可获得所需的结果

    SELECT 'c1' AS col, c1c3 AS C3, c1c4 AS C4
    UNION ALL
    SELECT 'c2' AS col, c2c3 AS C3, c2c4 AS C4
    

    第一个解决方案只是一个示例,说明如何 UNPIVOT 然后再次 PIVOT 以按照您想要的方式对列进行排序

    【讨论】:

    • 谢谢。我选择 Joe G Joseph 的答案是因为它更简洁。
    猜你喜欢
    • 2010-11-17
    • 2020-05-14
    • 1970-01-01
    • 1970-01-01
    • 2018-06-28
    • 1970-01-01
    • 2016-11-20
    • 1970-01-01
    • 2021-03-05
    相关资源
    最近更新 更多