重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

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

A 回答 (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 日付;
    • good
    • 0

行で並んでる結果を列に並べるのは、アプリ的なもの作らないと難しそうな気がします。



日付だけのグルーピングすれば
日付 レコード数
0901 6
は出ると思いますが、
>タイプ1個数 タイプ2個数 タイプ3個数
っていうのはタイプの格納結果によって変わる項目なので、静的なSQLでは作り出せないですよね?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す