98

以下の SQL に列を表示したいのですがB、それをクエリに追加すると、次のエラーが表示されます。

列 T2.B' は、集計関数にも GROUP BY 句にも含まれていないため、選択リストでは無効です。

私のコード:

SELECT A, COUNT(B) as T1, B 
FROM T2 
WHERE ID=1 
GROUP BY A 
4

3 に答える 3

175

言い換えれば、このエラーは、SQL Server がグループから選択するものを認識していないことを示しています。 B

1 つの特定の値 ( MINSUM、または などAVG) を選択する場合は適切な集計関数を使用するか、すべての値を新しい行として選択する (つまりBGROUP 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 つのクエリではこれが明確になり、エラーは発生しません。

  1. 集計の使用

    SELECT A, COUNT(B) AS T1, SUM(B) AS B
    FROM T2
    GROUP BY A
    

    戻ります:

    A T1 B
    1 2 92
    2 3 68
    
  2. 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
    
于 2013-08-15T18:00:41.013 に答える
0

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
于 2018-08-14T11:45:10.860 に答える