- 締切済み
GROUP BYと副問い合わせ
SQLで悩んでいるので質問いたします。 テーブル例 日付 タイプ 個数 0901 1 5 0901 1 3 0901 2 2 0901 2 4 0901 3 1 0901 3 2 0902 1 5 0902 1 3 : : とあります。 このデータを日付毎、タイプ毎に個数を取得したいと考えています。 そこで下記のようにSQLを実行 SELECT 日付、sum(個数)asタイプ別個数、タイプ count(*) as タイプ別レコード数 FROM テーブル名 GROUP BY 日付、タイプ ORDER BY 日付、タイプ 取得できるレコードは下記のようになります。 日付 タイプ別個数 タイプ タイプ別レコード数 0901 8 1 2 0901 6 2 2 0901 3 3 2 : となります。 ここまでは簡単にいけたのですが、 できればタイプ別の個数を日付で1レコードで取得できないかと悩んでいます。 期待している取得レコードは下記です。 日付 タイプ1個数 タイプ2個数 タイプ3個数 レコード数 0901 8 6 3 6 0902 : このようにするためにSELECT部分に副問い合わせをしようとしていますがうまくいきません。 SQLで出来る方法があれば、教えてください。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- chukenkenkou
- ベストアンサー率43% (833/1926)
列「タイプ」の数値の種類は、固定ということでいいのですね? もしそうであれば、副問い合わせを使うまでもなく、実現可能です。 <検索SQL例> select 日付, coalesce(sum(case when タイプ=1 then 個数 end),0) as タイプ1個数, coalesce(sum(case when タイプ=2 then 個数 end),0) as タイプ2個数, coalesce(sum(case when タイプ=3 then 個数 end),0) as タイプ3個数, count(*) as レコード数 from t1 group by 日付 order by 日付;
- t_nojiri
- ベストアンサー率28% (595/2071)
行で並んでる結果を列に並べるのは、アプリ的なもの作らないと難しそうな気がします。 日付だけのグルーピングすれば 日付 レコード数 0901 6 は出ると思いますが、 >タイプ1個数 タイプ2個数 タイプ3個数 っていうのはタイプの格納結果によって変わる項目なので、静的なSQLでは作り出せないですよね?