締切り済みの質問
あるテーブルを自己結合して目的の表を作成したいのですが、
目標の表が作成出来ません。下記に作成したSQLを記載しました。
どこが悪いのかご教授願います。
下記「あ」のようなテーブルがあるとします。
「あ」
県 日別 種類 区分 事故数
東京 2008/3/1 バイク 日 50
東京 2008/3/31 バイク 月末 20
東京 2008/3/31 車 月末 30
東京 2008/4/30 バイク 月末 40
埼玉 2008/5/31 車 月末 10
このテーブルから区分が"日"の"事故数"を"月末"に加算した結果を抽出したいとおもいます。
抽出の最終目標は「い」の内容です。
「い」
県 日別 種類 区分 事故数 総数
東京 2008/3/31 バイク 月末 20 70
東京 2008/3/31 車 月末 30 30
東京 2008/4/30 バイク 月末 40 90
しかし私が作成したSQLですと「う」の形となってしまいます。
「う」
県 日別 種類 区分 事故数 総数
東京 2008/3/31 バイク 月末 20 70
東京 2008/3/31 車 月末 30 (空白)
東京 2008/4/30 バイク 月末 40 90
使用SQL
select
A.県,
A.日別,
A.種類,
A.区分,
A.事故数,
A.事故数 + (
select B.事故数 from 事故TBL B
where A.県 = B.県 and
A.種類 = B.種類 and
A.区分 = 日
) as 総数
from 事故TBL A
where
A.県 = 東京
and A.区分 = 月末
以上
投稿日時 - 2008-06-01 15:51:58
0人が「このQ&Aが役に立った」と投票しています
回答(3件中 1~3件目)
SQLServerで正解に近いと思われるSQLを書いてみました。
日別の取り扱いが面倒だったので切り分けています。
もしテーブルの構造を変えられるなら変えたほうがいいと思います。
SELECT
A.県,
A.種類,
A.区分,
A.TSUKI AS 月,
A.NEN AS 年,
ISNULL(B.JIKOSU,A.JIKOSU) AS 事故数,
A.JIKOSU AS 総数
FROM
(
SELECT
T.県,
T.種類,
'MON' AS 区分,
YEAR(T.日別) AS NEN,
MONTH(T.日別) AS TSUKI,
SUM(T.事故数) AS JIKOSU
FROM
TABLE T
GROUP BY
T.県,
T.種類,
YEAR(T.日別),
MONTH(T.日別)
)A LEFT JOIN
(
SELECT
T.県,
T.種類,
T.区分,
YEAR(T.日別) AS NEN,
MONTH(T.日別) AS TSUKI,
SUM(T.事故数) AS JIKOSU
FROM
TABLE T
WHERE T.区分 = '日'
GROUP BY
T.県,
T.種類,
T.区分,
YEAR(T.日別),
MONTH(T.日別)
)B ON A.県 = B.県
AND A.種類 = B.種類
AND A.TSUKI = B.TSUKI
AND A.NEN = B.NEN
ORDER BY
A.県 DESC,
A.TSUKI,
A.NEN
投稿日時 - 2008-06-01 20:19:14