前提・実現したいこと
SQLで抽出したデータを画面に表示させるコードを作成しています。
年月ごとに、データを集計したいです。
なので、GROUP BY から[得意先コード]の要素を外したいのですが
外すとエラーになってしまいます。
発生している問題・エラーメッセージ
メッセージ 8120、レベル 16、状態 1、行 37 列 'CTE.[得意先コード]' は選択リスト内では無効です。この列は集計関数または GROUP BY 句に含まれていません。
該当のソースコード
SQL
1WITH CTE as ( 2SELECT 3DE.[MNTH] AS [年月] 4,DE.TKIB AS [得意先コード] 5,OP.KTKM AS [NAME] 6,TK.[K集計] AS [契約集計コード] 7,TK.[S集計] AS [施設コード] 8,ISNULL(SUM(DE.[KIN]), 0) AS [現行価(多店舗)] 9,ISNULL(SUM(DE.[KIN]), 0) AS [現行価(契約施設)] 10,ISNULL(SUM(DE.[AKIN]), 0) AS [契約価(多店舗)] 11,ISNULL(SUM(DE.[AKIN]), 0) AS [契約価(契約施設)] 12,ISNULL(SUM(DE.[ASA]), 0) AS [差額(多店舗)] 13,ISNULL(SUM(DE.[ASA]), 0) AS [差額(契約施設)] 14FROM vkadmin.[出力マスタ] OP WITH (NOLOCK) 15INNER JOIN vkadmin.[商品詳細] DE WITH(NOLOCK) 16ON OP.[得意先コード] = DE.[TKIB] 17INNER JOIN vkadmin.[得意先マスタ] TK WITH(NOLOCK) 18ON OP.[得意先コード] = TK.[得意先コード] 19WHERE DE.[MNTH] BETWEEN '201904' AND '201909' 20 AND DE.[TKIB] = (SELECT [K集計] 21 FROM vkadmin.得意先マスタ WITH(NOLOCK) 22 WHERE [得意先コード] = '0732771') 23 or DE.[TKIB] = (SELECT [S集計] 24 FROM vkadmin.得意先マスタ WITH(NOLOCK) 25 WHERE [得意先コード] = '0732771') 26GROUP BY DE.[MNTH],OP.[KRAN],OP.[IRAN],DE.[TKIB],TK.[K集計],TK.[S集計],OP.[KTKM] 27) 28 29SELECT [年月] 30,ISNULL(CASE WHEN (SELECT [K集計] 31FROM vkadmin.得意先マスタ WITH(NOLOCK) 32WHERE [得意先コード] = '0732771') = [得意先コード] THEN SUM([現行価(多店舗)] ) ELSE 0 END,0) AS [現行価(多店舗)] 33,ISNULL(CASE WHEN (SELECT [S集計] 34FROM vkadmin.得意先マスタ WITH(NOLOCK) 35WHERE [得意先コード] = '0732771') = [得意先コード] THEN SUM([現行価(契約施設)]) ELSE 0 END,0) AS [現行価(契約施設)] 36,ISNULL(CASE WHEN (SELECT [K集計] 37FROM vkadmin.得意先マスタ WITH(NOLOCK) 38WHERE [得意先コード] = '0732771') = [得意先コード] THEN SUM([契約価(多店舗)]) ELSE 0 END,0) AS [契約価(多店舗)] 39,ISNULL(CASE WHEN (SELECT [S集計] 40FROM vkadmin.得意先マスタ WITH(NOLOCK) 41WHERE [得意先コード] = '0732771') = [得意先コード] THEN SUM([契約価(契約施設)]) ELSE 0 END,0) AS [契約価(契約施設)] 42,ISNULL(CASE WHEN (SELECT [K集計] 43FROM vkadmin.得意先マスタ WITH(NOLOCK) 44WHERE [得意先コード] = '0732771') = [得意先コード] THEN SUM([差額(多店舗)]) ELSE 0 END,0) AS [差額(多店舗)] 45,ISNULL(CASE WHEN (SELECT [S集計] 46FROM vkadmin.得意先マスタ WITH(NOLOCK) 47WHERE [得意先コード] = '0732771') = [得意先コード] THEN SUM([差額(契約施設)]) ELSE 0 END,0) AS [差額(契約施設)] 48FROM CTE 49 50GROUP BY [年月],[得意先コード] 51ORDER BY [年月] 52※'0732771'は、都度入力するパラメータです。
試したこと
S集計,K集計とぶつける得意先コードは、共通式の上部分のクエリで取得しますが
共通式での[得意先コード] と同じ値のままで抽出してくれる他の方法が見当たらず困っています。
補足情報(FW/ツールのバージョンなど)
補足)10/31 11:31
現在のコードで取得できるのはこのような形です。(見づらくてすみません)
[年月][現行価(多店舗)][現行価(契約施設)][契約価(多店舗)][契約価(契約施設)][差額(多店舗)][差額(契約施設)]
201904 5407801 0000000 5223491 0000000 -184310 0000000
201904 0000000 2127342 0000000 2090846 0000000 -36496
201905 0000000 2090724 0000000 2044902 0000000 -45822
201905 4761532 0000000 4597416 0000000 -164116 0000000
201906 0189238 0000000 3069219 0000000 -120019 0000000
201906 0000000 1725209 0000000 1695254 0000000 -29955
201907 0000000 2412356 0000000 2348237 0000000 -64119
201907 5869159 0000000 5676023 0000000 -193136 0000000
201908 0000000 1962943 0000000 1925071 0000000 -37872
201908 5172795 0000000 4983429 0000000 -189366 0000000
201909 4061538 0000000 3963035 0000000 -98503 0000000
201909 0000000 2129935 0000000 2094667 0000000 -35268
年月ごとに得意先コードが異なるため同じ年月に2つの数値が出てきてしまいます。
これを年月ごと、1行のみに集計したいです。
そのため、GROUP BYから得意先コードを外したいです。
例)
201904 5407801 0000000 5223491 0000000 -184310 0000000
201904 0000000 2127342 0000000 2090846 0000000 -36496
↓
201904 5407801 2127342 5223491 2090846 -184310 -36496
環境
Windows10
使用ツール
・SQL Server Manegement Studio