- ベストアンサー
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*の数は該当日の合計です いろいろ調べているのですがわかりません。 どなたか教えてー(><)
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
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が順番に、 登録されている日付だけ表示すると こんな感じでいいでしょうか?
その他の回答 (5)
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
補足
できましたー! 何度もレスありがとうございますー またよろしくお願いします!
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
補足
レスありがとうございます。 >例えば、会員番号=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| となるような文には無理ですかねー? あとちょっとのような気がするのですがー
例えば、会員番号=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; **********************************
- melanie_jp
- ベストアンサー率50% (1/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
補足
レスありがとうございます! デザインは下記レスにも書いたのですが、 Date,ITemIDのテーブルデザインは Date varchar 8 ItemID int 4 データの中身は、実際は Date ⇒ 20060202 会員番号 ⇒ 0000001~ ItemID ⇒ 1~10までの数値 テーブル名は、ItemMstです。 データの意味は、何月何日に会員番号何番の人が、ItemIDの??番をゲットしたみたいな意味です。 それを集計して 日付|ID1番をゲットした人の数|2をゲットした人の数|・・・ の表を出したいのですー。 日付は、できれば?月?日と出力したいんですが、20060201をそのままでてもいいです。 できれば、期間内のすべての日付がでるといいのですが、難しければ登録してある日付のみでもいいです。 おねがいしますーーー><
- chukenkenkou
- ベストアンサー率43% (833/1926)
質問内容があまりにも漠然としており、よく分かりません。 Date、ItemIDは、一つの表の構成列のことですか? ItemID1、ItemId2、ItemID3というのは、ItemIDという列の値ですか? この列には、3種類しか値がないということでしょうか? Date列の値毎に、ItemID列(値は3種類?)の件数を、横に並べて表示したいということでしょうか?
補足
レスありがとうございます。 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までしか書かなかったのは、少ないほうがわかりやすいかなーと思ってしまってー よろしくおねがいしますー
補足
おおお、感激です! できました!! 超助かりましたー またよろしくお願いします!