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

次の結果が得られるcreateクエリを作成したいと思います。

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

つまり、次の場合の4つの列の組み合わせです。

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

私はある程度の進歩を遂げることができましたが、最終的には私が望むものではありません。私はここまで到達することができました:http ://sqlfiddle.com/#!3 / 7d3d4 / 2/0

しかし、クエリを上記の希望する出力のようにフォーマットする方法がわかりません。テーブルを使おうと思っていましたが、2番目のステートメントPIVOTを追加する必要があると非常に複雑になりそうだったため、すぐにそのアイデアを放棄しました(上記の例は本当に基本的な例であるため、さらに追加する必要があります)PIVOTこれを実行する必要がある列の数の)。

私は何が欠けていますか?

ありがとうございました。

4

2 に答える 2

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 に答える
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 に答える