3

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

    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(我最终不得不添加更多,因为我上面的示例是一个非常基本的示例我需要执行此操作的列数)。

我错过了什么?

谢谢你。

4

2 回答 2

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 小提琴演示

于 2012-08-18T06:31:33.547 回答
1

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

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 以您想要的方式对列进行排序

于 2012-08-18T03:43:22.387 回答