• ベストアンサー

SQL文で抽出方法がわかりません。

以下のようなDBがありまして、以下のように抽出結果をだしたいのですが、どうやればいいでしょうか? 2月分のデータを表示 ■DB Date,ItemID ■抽出結果 2月1日|ItemID1の数|ItemID2の数|ItemID3の数 2月2日|ItemID1の数|ItemID2の数|ItemID3の数 2月3日|ItemID1の数|ItemID2の数|ItemID3の数 2月4日|ItemID1の数|ItemID2の数|ItemID3の数 (省略) ※ItemID*の数は該当日の合計です いろいろ調べているのですがわかりません。 どなたか教えてー(><)

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

  • ベストアンサー
回答No.5

select sum(case when itemid=1 then 1 else 0 end) itemid1, sum(case when itemid=2 then 1 else 0 end) itemid2, sum(case when itemid=3 then 1 else 0 end) itemid3 from itemmst group by date; これを実行すると結果は下記のとおりです。 DATE   ITEM1 ITEM2 ITEM3 -------- ----- ----- ----- 20060201 2 0 1 20060203 1 2 3 すべてのITEMが順番に、 登録されている日付だけ表示すると こんな感じでいいでしょうか?

Haule
質問者

補足

おおお、感激です! できました!! 超助かりましたー またよろしくお願いします!

その他の回答 (5)

noname#22222
noname#22222
回答No.6

s_husky です。 No5の回答を確認しました。    |ITEMID1|ITEMID2|ITEMID3| ----|---------------------------------   1|     2|      1|     0|   2|     0|      0|     1|   3|     1|      1|      0| ID Date   Member ItemID 1 20060201 1       1 2 20060201 1       1 3 20060201 2       2 4 20060203 2       3 5 20060204 3       1 6 20060204 1       2

Haule
質問者

補足

できましたー! 何度もレスありがとうございますー またよろしくお願いします!

noname#22222
noname#22222
回答No.4

s_husky です。 会員列を忘れていました。 Select Date, member, itemid, Count(itemid) as Get from itemmst group by member,itemid, date order by date; |DATE |MEMBER|ITEMID|GET| ---|--------------------------- 1|20060201| 1| 1| 2| 2|20060201| 2| 2| 1| 3|20060203| 2| 3| 1| 4|20060204| 1| 2| 1| 5|20060204| 3| 1| 1| この時、ItemMst は次のようです。 ID Date Member ItemID 1 20060201 1 1 2 20060201 1 1 3 20060201 2 2 4 20060203 2 3 5 20060204 3 1 6 20060204 1 2

Haule
質問者

補足

レスありがとうございます。 >例えば、会員番号=1のゲット履歴を求めるには、 >Select Date, Count(itemid) from itemmst Where >itemid=1 group by date; >というSQL文になります。 >   |DATE   |(expession)| >  1|20060201|      2| >  2|20060204|      1| これを参考にすると、 Select Date, Count(itemid) as Item1 from itemmst Where itemid=1 group by date; と Select Date, Count(itemid) as Item2 from itemmst Where itemid=2 group by date; を結合すればできそうなのですが、やっぱりわかりません><    |DATE  | Item1 |   1|20060201|   2|   2|20060204|   1| と    |DATE  | Item2 |   1|20060201|   1|   2|20060208|   3| を結合して    |DATE  | Item1 | Item2 |   1|20060201|      2| 1|   2|20060204|      1| 0|   2|20060208|      0| 3| となるような文には無理ですかねー? あとちょっとのような気がするのですがー

noname#22222
noname#22222
回答No.3

例えば、会員番号=1のゲット履歴を求めるには、 Select Date, Count(itemid) from itemmst Where itemid=1 group by date; というSQL文になります。    |DATE   |(expession)| ---|---------------------   1|20060201|      2|   2|20060204|      1| ここまでは、質問者も承知のことでしょう! これを、    |DATE   |ItemID_1 |ItemID_2  |ItemID_3 | ---|-------------------------------------   1|20060201|      2|      1|      0|   2|20060204|      1|      1|      3| ということでしょうが、...うーんじゃないでしょうか? が、    |DATE   |ITEMID|GET| ---|--------------------   1|20060201|     1| 2|   2|20060201|     2| 1|   3|20060203|     3| 1|   4|20060204|     1| 1|   5|20060204|     2| 1| ※SQL Server 2000 に Access2003.adp よりアクセスしてSQL文の実行結果をフォームに表示した場合です。 というようなデータの取得は可能です。 ********************************** Select Date, itemid, Count(itemid) as Get from itemmst group by itemid, date; **********************************

回答No.2

もっと詳しい情報を教えてくれないとSQL文書けません。 例えば、テーブル名、Dateのデータ型など・・・ 下記SQL文でfrom句のテーブル名と where句のdate値を正しいデータ型に直してください。 select date, sum(ItemID1), sum(ItemID2), sum(ItemID3) from tablename where date>=2月1日 and date<3月1日 group by date

Haule
質問者

補足

レスありがとうございます! デザインは下記レスにも書いたのですが、 Date,ITemIDのテーブルデザインは Date varchar 8 ItemID int 4 データの中身は、実際は Date ⇒ 20060202 会員番号 ⇒ 0000001~ ItemID ⇒ 1~10までの数値 テーブル名は、ItemMstです。 データの意味は、何月何日に会員番号何番の人が、ItemIDの??番をゲットしたみたいな意味です。 それを集計して 日付|ID1番をゲットした人の数|2をゲットした人の数|・・・ の表を出したいのですー。 日付は、できれば?月?日と出力したいんですが、20060201をそのままでてもいいです。 できれば、期間内のすべての日付がでるといいのですが、難しければ登録してある日付のみでもいいです。 おねがいしますーーー><

回答No.1

質問内容があまりにも漠然としており、よく分かりません。 Date、ItemIDは、一つの表の構成列のことですか? ItemID1、ItemId2、ItemID3というのは、ItemIDという列の値ですか? この列には、3種類しか値がないということでしょうか? Date列の値毎に、ItemID列(値は3種類?)の件数を、横に並べて表示したいということでしょうか?

Haule
質問者

補足

レスありがとうございます。 Date,ITemIDのテーブルデザインは Date varchar 8 ItemID int 4 データの中身は、実際は Date ⇒ 20060202 会員番号 ⇒ 0000001~ ItemID ⇒ 1~10までの数値 データの意味は、何月何日に会員番号何番の人が、ItemIDをゲットしたみたいな意味なのです。 それを集計して、 2月1日にID1をゲットした数、ID2をゲットした数、ID3をゲットした数・・・としたいのです。 ■抽出結果 2月1日|ItemID1の数|ItemID2の数|ItemID3の数 2月2日|ItemID1の数|ItemID2の数|ItemID3の数 2月3日|ItemID1の数|ItemID2の数|ItemID3の数 2月4日|ItemID1の数|ItemID2の数|ItemID3の数 抽出結果に3までしか書かなかったのは、少ないほうがわかりやすいかなーと思ってしまってー よろしくおねがいしますー

関連するQ&A