dポイントプレゼントキャンペーン実施中!

Visual Studio Express 2013 for Webでデータベースアプリを作成しています。
例えば、
Person表
IdS_IdC_IdZ
11212
2222
323NULL
444NULL
54444
6555
7111
8167
9777
10666
1115NULL
12455
13455
14678
のようなデータがあり、横軸S_Id、縦軸C_Idの数、の積み上げ棒グラフ(StackedColumn)
(S_Id毎にC_Idの数の内訳を示したグラフ。カウント対象はZがNULLでないものだけ)
を作成するには、どのようなSQL SELECT文を書けばよいでしょうか。
目的とする要素数は、
SELECT S_Id, C_Id, COUNT(Z)
FROM Person
GROUP BY S_Id, C_Id;
で出るのですが、
積み上げ棒グラフのためには、
SELECT S_Id, C_Id=1の数(ZがNULLでない), C_Id=2の数(ZがNULLでない), C_Id=3の数(ZがNULLでない), ...
FROM Person
GROUP BY S_Id;
のような形にする必要があるようで、うまく書けません。
COUNTで、ZがNULLでなくかつC_Id=1のものをカウントする、というようなことができればよいのですが。

「積み上げ棒グラフのためのSQL SELE」の質問画像

A 回答 (2件)

こういうことでしょうか?



select S_Id
, count(case C_Id when 1 then 1 else null end) Count_1
, count(case C_Id when 2 then 1 else null end) Count_2
, count(case C_Id when 3 then 1 else null end) Count_3
, count(case C_Id when 4 then 1 else null end) Count_4
, count(case C_Id when 5 then 1 else null end) Count_5
, count(case C_Id when 6 then 1 else null end) Count_6
, count(case C_Id when 7 then 1 else null end) Count_7
from Person
where Z is not null
group by S_Id;

C_Idの種類分だけ列記しなくてはいけませんが・・
    • good
    • 0
この回答へのお礼

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

お礼日時:2014/10/01 21:43

> COUNTで、ZがNULLでなくかつC_Id=1のものをカウントする、


単にWhereで良いのでは?

SELECT S_Id, C_Id, COUNT(Z)
FROM Person
WHERE Z ls Not Null
AND C_Id = 1
GROUP BY S_Id, C_Id;

この回答への補足

ご回答ありがとうございます。
しかし、積み上げ棒グラフのためには、
SELECT S_Id, C_Id=1の数(ZがNULLでない), C_Id=2の数(ZがNULLでない), C_Id=3の数(ZがNULLでない), ...
FROM Person
GROUP BY S_Id;
のような形にする必要があるようで、「ZがNULLでないC_Id=xの数」を一語でSELECTに列挙する必要があります。

補足日時:2014/10/01 06:37
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!