4

このように、集計関数とグループ化句を使用して CASE を使用するクエリがあります。

SELECT
A
,B
,C
,CASE
     WHEN <COLUMN_NAME_A> IS NOT NULL 
     THEN (SUM(<COLUMN_NAME_B>) * <COLUMN_NAME_A>)
          ELSE 0
END AS <ALIAS>
FROM <TARGET_TABLE>
GROUP BY
A
,B
,C
,<ALIAS>

「GROUP BYおよびWITH ... BY句には集計が含まれていない可能性があります」というエラーが表示されました

次に、スクリプトを変更します(group byから除外します)

SELECT
A
,B
,C
,CASE
     WHEN <COLUMN_NAME_A> IS NOT NULL 
     THEN (SUM(<COLUMN_NAME_B>) * <COLUMN_NAME_A>)
          ELSE 0
END AS <ALIAS>
FROM <TARGET_TABLE>
GROUP BY
A
,B
,C

それでも「選択された非集計値は、関連付けられたグループの一部である必要があります」というエラーが表示されます

group by の一部である必要がある理由と、それを修正するにはどうすればよいかを理解するのを手伝ってください。

4

2 に答える 2

19

これを試して:

SELECT
A
,B
,C
,SUM(CASE
     WHEN <COLUMN_NAME_A> IS NOT NULL 
     THEN <COLUMN_NAME_B> * <COLUMN_NAME_A>
          ELSE 0
END) AS <ALIAS>
FROM <TARGET_TABLE>
GROUP BY
A
,B
,C

しかし、CASEステートメントには意味がありません。<COLUMN_NAME_A>is NULLieの場合、集計で<COLUMN_NAME_B> * <COLUMN_NAME_A>NULL無視されます。SUM代わりにこれを使用してください。

SELECT
A
,B
,C
,ISNULL(SUM(<COLUMN_NAME_B> * <COLUMN_NAME_A>), 0) AS <ALIAS>
FROM <TARGET_TABLE>
GROUP BY
A
,B
,C

ISNULLnull以外の値が取得されない場合に使用されます。

于 2013-01-29T10:58:07.200 に答える
0

多分これを試してみてください

SELECT  A
,B
,C
,CASE
     WHEN <COLUMN_NAME_A> IS NOT NULL 
     THEN (SUM(<COLUMN_NAME_B>) * <COLUMN_NAME_A>)
          ELSE 0
END AS <ALIAS>
FROM <TARGET_TABLE>
GROUP BY
A
,B
,C
,<COLUMN_NAME_A>
于 2019-05-31T14:25:36.543 に答える