トップ回答者
データ抽出用SQL文の質問です

質問
-
お世話になります。
初歩の質問ですが、よろしくお願いいたします。
環境:SQL SERVER 2005
テーブル情報:
品種 保留フラグ A1 1 A1 NULL A2 1 A2 1 A2 NULL A3 1 A3 1 A4 NULL A4 NULL A4 NULL ※保留フラグ 1 :または NULL
上記のテーブルから、下記のフォーマットでデータを抽出したいです。
↓↓↓↓↓
品種 流動中 保留中 A1 1 1 A2 1 2 A3 2 A4 3 ※データがない時に、空白にしたいですが・・・(可能であれば、"0"の表示仕方も教えてほしいです。)
一発SQL文を発行したいですが、ヒントを教えて頂けないでしょうか。よろしくお願いいたします。
回答
-
質問者のレベル感と分かりやすさを考えるに GROUP BY でも良いかなぁ、と個人的には思います。
SELECT
以下のような感じですね。
品種,
COUNT(CASE WHEN 保留フラグ IS NULL THEN 1 END) 流動中,
COUNT(保留フラグ) 保留中
FROM テーブル
GROUP BY 品種MCITP(Database Developer/Database Administrator)
- 回答としてマーク kentkent_jp 2014年7月20日 1:43
すべての返信
-
PIVOT ですかね。
-
例示だけでなく、もう少しきちんと説明できませんか? 流動中 の値の数え方、保留中の数え方。
でその次のステップとして、数え方を具体的なSQL文にはできますか? つまり
品種 流動中
A1 1
A2 1
A4 3という表と
品種 保留中
A1 1
A2 2
A3 2という表です。
それができれば2つの表を結合するだけです。説明できるところまで説明し、分からない部分を質問してください。
※データがない時に、空白にしたいですが・・・(可能であれば、"0"の表示仕方も教えてほしいです。)
どこに表示したいのかの説明がありません。そのような状態では答えようがありません。
-
佐祐理さんの指摘はもっともなのですが、とりあえず一般論を書いておきますので、これを元にトライできるのではないかと思います。
さて、藤森さんもご紹介されているPIVOTですが、以下をご紹介しておきます。PIVOTを使った方がスマートにできると思いますので、PIVOTについて調べてみて下さい。
PIVOTで遊ぶ
http://blogs.wankuma.com/kaya/archive/2006/09/24/39459.aspxまた、データが無い時、すなわちNULLを0に置き換えるのは、ISNULL関数、もしくはCOALESCE関数を使用します。
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
-
質問者のレベル感と分かりやすさを考えるに GROUP BY でも良いかなぁ、と個人的には思います。
SELECT
以下のような感じですね。
品種,
COUNT(CASE WHEN 保留フラグ IS NULL THEN 1 END) 流動中,
COUNT(保留フラグ) 保留中
FROM テーブル
GROUP BY 品種MCITP(Database Developer/Database Administrator)
- 回答としてマーク kentkent_jp 2014年7月20日 1:43
-
確かにPIVOTはある程度慣れが必要だと思いますし、まずは基本のGROUP BYをしっかり押さえる方が筋ですね。
PIVOTの例を載せておきます。
SELECT 品種, [0] 流動中, [1] 保留中 FROM ( SELECT 品種, isnull(保留フラグ, 0) 保留フラグ FROM テーブル ) T PIVOT ( count(保留フラグ) FOR 保留フラグ IN ( [0], [1] ) ) AS T;
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
- 編集済み trapemiya 2014年7月19日 3:13 追記