|
■No92081 (韋駄天 さん) に返信 > 以下の Table_A, Table_B のテーブルがある場合に、 Table_B に ST 列が 2 つあるような…? とりあえず、Table_B の先頭列は、ID という列名の主キーと読み替えておきます。
> この場合以下のようにするしかないのでしょうか? 余剰カンマや全角空白は、掲示板投稿時の綾かと思いますが、その SQL だと
CODE, ST1, ST2, ST3 A, 1, 1, 0 B, 0, 1, 2 C, 1, 0, 0
ではなく、
CODE, ST1, ST2, ST3 A, 2, 2, 2 B, 2, 2, 2 C, 2, 2, 2
になってしまうことでしょう。 求める結果を獲るためには、提示された SQL の ( SELECT COUNT(*) FROM Table_B WHERE ST = 1 ) AS ST1, などの行にある WHERE 句を WHERE Table_B.ST = 1 AND Table_B.CODE = Table_A.CODE に差し替える必要がありますね。
(別案1)
WITH Table_W AS (SELECT CODE, ST, COUNT(*) AS CNT FROM Table_B GROUP BY CODE, ST ) SELECT Table_A.CODE , ST1 = SUM(CASE Table_W.ST WHEN 1 THEN Table_W.CNT ELSE 0 END) , ST2 = SUM(CASE Table_W.ST WHEN 2 THEN Table_W.CNT ELSE 0 END) , ST3 = SUM(CASE Table_W.ST WHEN 3 THEN Table_W.CNT ELSE 0 END) FROM Table_A LEFT JOIN Table_W ON Table_A.CODE = Table_W.CODE GROUP BY Table_A.CODE
(別案2)
SELECT CODE, [1] AS ST_1, [2] AS ST_2, [3] AS ST_3 FROM ( SELECT Table_A.CODE, Table_B.ID, Table_B.ST FROM Table_A LEFT JOIN Table_B ON Table_A.CODE = Table_B.CODE ) AS X PIVOT (COUNT(ID) FOR ST IN ([1], [2], [3]) ) AS Y
|