2017-12-01 5 views
0

こんにちはコミュニティ次のクエリは、各活動状態の発生とその後、グループに追加します何の結果はありませんリストグループ化されたデータは、月によって

select 
    date_format(date_created, '%b') month, 
    month(date_created) pivot, 
    sum(case when a.state = 'created' then 1 else 0 end) created, 
    sum(case when a.state = 'notified' then 1 else 0 end) notified, 
    sum(case when a.state = 'confirmed' then 1 else 0 end) confirmed, 
    sum(case when a.state = 'approved' then 1 else 0 end) approved, 
    sum(case when a.state = 'authorized' then 1 else 0 end) authorized, 
    sum(case when a.state = 'attended' then 1 else 0 end) attended, 
    sum(case when a.state = 'canceled' then 1 else 0 end) canceled, 
    count(a.id) as total 
from activities a 
group by 1 order by pivot desc; 

だから私は、次のような結果に得る

enter image description here

私はゼロではデータやオートコンプリート状態の合計をありませんしたカ月間、この結果に追加したい

enter image description here

私はこのsqlfiddle

を共有

を私は同様のシナリオに、このanswerを見つけましたが、私はあなたに私が提示した場合にそれを適用できる方法を理解することはできませんあなたのためにありがとうございましたあなたは、日付テーブル(サブクエリ)とLEFT JOINを使用することができ

答えて

1

を助ける:

select 
    s.name month, 
    s.m pivot, 
    sum(case when a.state = 'created' then 1 else 0 end) created, 
    sum(case when a.state = 'notified' then 1 else 0 end) notified, 
    sum(case when a.state = 'confirmed' then 1 else 0 end) confirmed, 
    sum(case when a.state = 'approved' then 1 else 0 end) approved, 
    sum(case when a.state = 'authorized' then 1 else 0 end) authorized, 
    sum(case when a.state = 'attended' then 1 else 0 end) attended, 
    sum(case when a.state = 'canceled' then 1 else 0 end) canceled, 
    count(a.id) as total 
from (SELECT 1 m, 'Jan' AS name 
     UNION SELECT 2, 'Feb' 
     UNION SELECT 3, 'Mar' 
     UNION ...) s 
LEFT JOIN activities a 
    ON s.m = month(date_created) 
    --AND s.y = year(date_created) -- if needed 
group by 1 
order by pivot desc; 

DBFiddle Demo

+1

ありがとうございました。それは私が探していた結果です。 – user615274

+0

@ user615274何年ものデータがある場合は、2つの異なる年の集計データを避けるために、3番目の列を年に追加する必要があることに注意してください。 – lad2025

+0

あなたのコメントを開発してください。 – user615274

関連する問題