entryDate |updateDate | status | num
2015-12-03 9:00:00 | 2015-12-02 9:00:00 | 10 | 3
2015-12-10 21:00:00 | 2015-12-10 21:00:00 | 10 | 20
2015-12-25 09:00:00 | 2016-02-02 21:00:00 | 11 | 5
2015-12-27 12:00:00 | 2016-02-13 21:00:00 | 11 | 3
2016-03-14 12:00:00 | 2015-03-14 12:00:00 | 10 | 12
2016-03-18 12:00:00 | 2015-03-18 12:00:00 | 10 | 2
上記のようなuriagedataというテーブルがあり、当月から1年前までのデータをsqlで取り出して下記のような表示をPHPで表示させたく思っています。
2016/03 | 2016/02 | 2016/01 | 2015/12 | ・・・
新規 14 | 0 | 0 | 23 |・・・
削除 0 | 8 | 0 | 0 |・・・
データの抽出条件は
新規がstatusが10でentryDateでgroup byして、月ごとにnumの合計値を算出。
削除がstatusが11でupdateDateでgroup byして、月ごとにnumの合計値を算出。
新規を取り出すSQL文は
SELECT convert(varchar(7),entryDate,111),count(*)
FROM uriagedata
WHERE status='10'
AND entryDate(select dateadd(year,(-1),getdate()))
GROUP BY convert(varchar(7),entryDate,111)
取り出されるデータは
date | total
2016/03 | 14
2015/12 | 23
です。
削除を取り出すSQL文は
SELECT convert(varchar(7),updateDate,111) AS date,count(*) AS total
FROM uriagedata
WHERE status='10'
AND updateDate(select dateadd(year,(-1),getdate()))
GROUP BY convert(varchar(7),updateDate,111)
取り出される結果は
date | total
2016/02 | 2
です。
希望のデータの取り出し方は、下記のように新規も削除も、データがない月でも、年月と0件を表示させたいです。
date | total
2016/03 | 14
2016/02 | 0
2016/01 | 0
2015/12 | 23
| |
2015/03 | ・・
今は2つのSQL文を作ってデータを取り出しているのですが、新規と削除のデーターを1つのSQL文で取り出す事は可能なのでしょうか?
もしくは今まで通りSQL文を2つ使って下記のようにデータを取り出すSQL文はあるのでしょうか?
ちなみに使っているのは、SQLserber2008で、entryDateなどを文字列にしてGROUP BYしているのも条件です。
新規
date | total
2016/03 | 14
2016/02 | 0
2016/01 | 0
2015/12 | 23
| |
2015/03 | ・・
削除
date | total
2016/03 | 0
2016/02 | 8
2016/01 | 0
2015/12 | 0
| |
2015/03 | ・・
もしお時間あればご教示いただければと思います。
よろしくお願いします。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/04/03 02:09