いつもお世話になります。お忙しいところ恐縮です。よろしくお願いします。
SQLバージョン:5.5.60-MariaDB
テーブルが2つあります。
table_eigyou
(営業のたびにデータが増えるのでshainbangou1に同じ番号が何度も入力される。)
int smallint date ←データ型
id | shainbangou1 | eigyouday |
---|---|---|
1 | 3 | 2015-06-2 |
2 | 5 | 2017-11-25 |
3 | 3 | 2018-12-5 |
. | . | . |
. | . | . |
table_shain (社員の番号、名前、所属)
int smallint varchar varchar ←データ型
id_s | bangou | shain | shozoku |
---|---|---|---|
1 | 3 | Aさん | 東京支店 |
2 | 5 | Eさん | 福岡支店 |
. | . | . | . |
. | . | . | . |
. | . | . | . |
上記2つのテーブルを結合して「年度ごと」の各社員の営業回数(eigyouday)を集計したいと思っています。
望む結果は以下です。
shainbangou1 | shain | shozoku | 2016年度 | 2017年度 | 2018年度 |
---|---|---|---|---|---|
3 | Aさん | 東京支店 | 5 | 1 | 15 |
5 | Eさん | 福岡支店 | 8 | 20 | 35 |
. | . | . | . | . | . |
. | . | . | . | . | . |
. | . | . | . | . | . |
以下のSQLを実行しましたが望む結果が出ません。ご教示お願いいたします。
sql
1SELECT shainbangou1, shain, shozoku, 2 CASE WHEN DATE_FORMAT(eigyouday,'%m') < 4 THEN DATE_FORMAT(eigyouday,'%Y') -1 3 ELSE DATE_FORMAT(eigyouday,'%Y') 4 END 5 COUNT(*) AS kazoeru 6 FROM table_eigyou AS t1 7 JOIN table_shain AS t2 8 ON t1.shainbangou1 = t2.bangou 9 WHERE eigyouday 10 GROUP BY shainbangou1,shain,shozoku
実行結果
MySQL のメッセージ:
1064 - Something is wrong in your syntax : 'COUNT(*) AS kazoeru
sql
1SELECT shainbangou1, shain, shozoku, 2COUNT(*) AS kazoeru 3FROM table_eigyou AS t1 4JOIN table_shain AS t2 5ON t1.shainbangou1 = t2.bangou 6WHERE eigyouday BETWEEN '2017-04-01' AND '2018-03-31' 7GROUP BY shainbangou1,shain,shozoku 8
実行結果
shainbangou1 | shain | shozoku | kazoeru |
---|---|---|---|
3 | Aさん | 東京支店 | 5 |
5 | Eさん | 福岡支店 | 8 |
件数に間違いはありませんが、単年度のみとなり毎年度の集計ができません。
sql
1SELECT shainbangou1, shain, shozoku, 2COUNT(*) AS kazoeru 3FROM table_eigyou AS t1 4JOIN table_shain AS t2 5ON t1.shainbangou1 = t2.bangou 6WHERE eigyouday(BETWEEN '2017-04-01' AND '2018-03-31') 7OR(BETWEEN '2018-04-01' AND '2019-03-31') 8GROUP BY shainbangou1,shain,shozoku
実行結果
1064 - Something is wrong in your syntax : 'BETWEEN '2017-04-01' AND '2018-03-31')
OR(BETWEEN '2018-04-01' AND '2019-03-31'' 付近 : 6 行目
sql
1SELECT shainbangou1, shain, shozoku, 2 COUNT( CASE WHEN DATE_FORMAT(eigyouday,'%m') < 4 THEN DATE_FORMAT(eigyouday,'%Y') -1 3 ELSE DATE_FORMAT(eigyouday,'%Y') 4 END ) AS kazoeru 5 FROM table_eigyou AS t1 6 JOIN table_shain AS t2 7 ON t1.shainbangou1 = t2.bangou 8 WHERE eigyouday 9 GROUP BY shainbangou1,shain,shozoku
実行結果
shainbangou1 | shain | shozoku | kazoeru |
---|---|---|---|
7 | iさん | 北海道支店 | 15 |
15 | sさん | 大阪支店 | 30 |
件数に間違いはありませんが、全ての年度が合算されてしまいます。
sql
1SELECT shainbangou1, shain, shozoku, 2 COUNT(*) AS kazoeru 3 FROM table_eigyou AS t1 4 JOIN table_shain AS t2 5 ON t1.shainbangou1 = t2.bangou 6 WHERE 7 ( CASE WHEN DATE_FORMAT(eigyouday,'%m') < 4 THEN DATE_FORMAT(eigyouday,'%Y') -1 8 ELSE DATE_FORMAT(eigyouday,'%Y') 9 END AS nendo ) 10 GROUP BY shainbangou1,shain,shozoku 11
実行結果
1064 - Something is wrong in your syntax : 'AS nendo )
GROUP BY shainbangou1,shain,shozoku LIMIT 0, 25' 付近 : 9 行目
ご教示お願いいたします。
回答3件
あなたの回答
tips
プレビュー