こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

積み上げ棒グラフのためのSQL SELECT文

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のものをカウントする、というようなことができればよいのですが。

投稿日時 - 2014-09-30 22:04:14

QNo.8774396

困ってます

質問者が選んだベストアンサー

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

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の種類分だけ列記しなくてはいけませんが・・

投稿日時 - 2014-10-01 16:10:59

お礼

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

投稿日時 - 2014-10-01 21:43:30

このQ&Aは役に立ちましたか?

9人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

> 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;

投稿日時 - 2014-09-30 22:24:50

補足

ご回答ありがとうございます。
しかし、積み上げ棒グラフのためには、
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:54