どうも、あおです。
自分用のメモとして、SQLのGROUP化を覚書き。(WITH使います。)
やりたいことは、2つのテーブルを主キーで結合、
主キーでないいくつかの項目でグループ化して、それらを取得。
さらにグループ化していない項目を重複削除して
件数を取得するというもの。
実際にサンプルを例として説明
使用するテーブル:入金テーブル(TBL_NYUKIN)と
入金明細テーブル(TBL_NYUKIN_MEISAI)
結合キー(主キー):入金NO(NYUKIN_NO)
GROUP化するカラム:種別名(SHUBETSU_NAME)、年(NEN)、
金額(KINGAKU)
重複削除して件数取得するカラム:個人NO(NYUKIN_NO)
実際にテーブルにあるデータ
・入金テーブル(TBL_NYUKIN)
・入金明細テーブル(TBL_NYUKIN_MEISAI)
取得SQL・取得結果
グループ化するデータに同じ個人NOがあれば、1件としてカウントします。
(対象が何人いるか調べたい場合に使用)
コピペ用コード
WITH workNK AS(
SELECT
NKM.SHUBETSU_NAME
,NK.NEN
,NKM.KINGAKU
,COUNT(DISTINCT NK.KOJIN_NO) KOJIN_NO
FROM
TBL_NYUKIN AS NK
INNER JOIN
TBL_NYUKIN_MEISAI AS NKM
ON NK.NYUKIN_NO = NKM.NYUKIN_NO
GROUP BY
NKM.SHUBETSU_NAME
,NK.NEN
,NKM.KINGAKU
)
SELECT
*
FROM
workNK
SELECT
NKM.SHUBETSU_NAME
,NK.NEN
,NKM.KINGAKU
,COUNT(DISTINCT NK.KOJIN_NO) KOJIN_NO
FROM
TBL_NYUKIN AS NK
INNER JOIN
TBL_NYUKIN_MEISAI AS NKM
ON NK.NYUKIN_NO = NKM.NYUKIN_NO
GROUP BY
NKM.SHUBETSU_NAME
,NK.NEN
,NKM.KINGAKU
)
SELECT
*
FROM
workNK
ちなみに、WITHを複数使用したい場合は、
2つ目以降は先頭にカンマをつけて、WITHはつけないようにします。
以下サンプル。
やっぱりサブクエリはWITHがいい。