【SQL Server】WITHを使用したGROUP BYのサンプルコード

SQL
スポンサーリンク

どうも、あおです。

 

 

自分用のメモとして、SQLのGROUP化を覚書き。(WITH使います。)

 

やりたいことは、2つのテーブルを主キーで結合、

主キーでないいくつかの項目でグループ化して、それらを取得。

さらにグループ化していない項目を重複削除して

件数を取得するというもの。

 

実際にサンプルを例として説明

使用するテーブル:入金テーブル(TBL_NYUKIN)と

入金明細テーブル(TBL_NYUKIN_MEISAI)

 

結合キー(主キー):入金NO(NYUKIN_NO)

 

GROUP化するカラム:種別名(SHUBETSU_NAME)、年(NEN)、

金額(KINGAKU)

 

重複削除して件数取得するカラム:個人NO(NYUKIN_NO)

 

 

実際にテーブルにあるデータ

・入金テーブル(TBL_NYUKIN)

sql-groupby-with-1

 

 

 

 

 

 

 

 

 

 

・入金明細テーブル(TBL_NYUKIN_MEISAI)

sql-groupby-with-2

 

 

 

 

 

 

 

 

 

 

 

取得SQL・取得結果

sql-groupby-with-4

 

 

 

 

 

 

 

 

 

 

 

 

 

グループ化するデータに同じ個人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

 

 

 

ちなみに、WITHを複数使用したい場合は、

2つ目以降は先頭にカンマをつけて、WITHはつけないようにします。

以下サンプル。

sql-groupby-with-5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

やっぱりサブクエリはWITHがいい。