• 締切済み

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で出来る方法があれば、教えてください。 よろしくお願いします。

みんなの回答

回答No.2

列「タイプ」の数値の種類は、固定ということでいいのですね? もしそうであれば、副問い合わせを使うまでもなく、実現可能です。 <検索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)
回答No.1

行で並んでる結果を列に並べるのは、アプリ的なもの作らないと難しそうな気がします。 日付だけのグルーピングすれば 日付 レコード数 0901 6 は出ると思いますが、 >タイプ1個数 タイプ2個数 タイプ3個数 っていうのはタイプの格納結果によって変わる項目なので、静的なSQLでは作り出せないですよね?