以下の SQL に列を表示したいのですがB
、それをクエリに追加すると、次のエラーが表示されます。
列 T2.B' は、集計関数にも GROUP BY 句にも含まれていないため、選択リストでは無効です。
私のコード:
SELECT A, COUNT(B) as T1, B
FROM T2
WHERE ID=1
GROUP BY A
以下の SQL に列を表示したいのですがB
、それをクエリに追加すると、次のエラーが表示されます。
列 T2.B' は、集計関数にも GROUP BY 句にも含まれていないため、選択リストでは無効です。
私のコード:
SELECT A, COUNT(B) as T1, B
FROM T2
WHERE ID=1
GROUP BY A
言い換えれば、このエラーは、SQL Server がグループから選択するものを認識していないことを示しています。 B
1 つの特定の値 ( MIN
、SUM
、または などAVG
) を選択する場合は適切な集計関数を使用するか、すべての値を新しい行として選択する (つまりB
、GROUP BY
フィールド リストに含める) 必要があります。
次のデータを検討してください。
ID AB 1 1 13 1 1 79 1 2 13 1 2 13 1 2 42
クエリ
SELECT A, COUNT(B) AS T1
FROM T2
GROUP BY A
戻ります:
T1 1 2 2 3
それはすべて順調です。
ただし、このエラーが発生する次の (不正な) クエリを検討してください。
SELECT A, COUNT(B) AS T1, B
FROM T2
GROUP BY A
そして、問題を示す返されたデータセット:
A T1 B 1 2 13? 79? 13 と 79 の両方を別々の行として? (13+79=92)? ...? 2 3 13? 42? ...?
ただし、次の 2 つのクエリではこれが明確になり、エラーは発生しません。
集計の使用
SELECT A, COUNT(B) AS T1, SUM(B) AS B
FROM T2
GROUP BY A
戻ります:
A T1 B 1 2 92 2 3 68
GROUP BY
リストへの列の追加
SELECT A, COUNT(B) AS T1, B
FROM T2
GROUP BY A, B
戻ります:
A T1 B 1 1 13 1 1 79 2 2 13 2 1 42
update と SWAP で必要な数だけ case を使用できます
update Table SET column=(case when is_row_1 then value_2 else value_1 end) where rule_to_match_swap_columns