1
SELECT FirstName,
       MiddleName,
       LastName,
       COUNT(*) AS 'Count'
FROM Person.Person TABLESAMPLE(10 PERCENT)

エラーが表示されます

メッセージ 8120、レベル 16、状態 1、行 1 列 'Person.Person.FirstName' は、集計関数にも GROUP BY 句にも含まれていないため、選択リストでは無効です。

誰かが私が間違っていることを説明できますか?

4

2 に答える 2

4
SELECT FirstName, MiddleName, LastName, 
  [count] = COUNT(*) OVER()
 FROM Person.Person 
 TABLESAMPLE (10 PERCENT);

以下を好むかもしれませんが、TABLESAMPLEIIRCにはいくつかの問題があるため(私にとってTABLESAMPLEは、毎回予測できない行数が返され、テーブル全体から行を数えることもできなくなります):

SELECT TOP 10 PERCENT FirstName, MiddleName, LastName,
  [count] = COUNT(*) OVER()
 FROM Person.Person 
 ORDER BY [something];

行のランダムなセットが本当に必要な場合は、を使用できますORDER BY NEWID();。また、実際のテーブルの行数ではなく、クエリによって返される実際の数が必要な場合は、クエリの後に (COUNT集計なしで) 次のように入力します。

SELECT @@ROWCOUNT;

また、列のエイリアスには使用しないでください。'single quotes'この構文は非推奨の場合があり、エイリアスが文字列リテラルのように見えます。エイリアスがキーワードであるか、スペースが含まれているか、または識別子の規則に違反しているためにエイリアスをエスケープする必要がある場合は、 を使用します[square brackets]

于 2013-08-23T14:25:24.763 に答える
2

集計関数 (sum、count、avg など) を使用するたびに、GROUP 句を特定する必要があります。

クエリでは、Firstname、Middlename、および lastname ごとにいくつの行があるかを特定しています。

    SELECT FirstName,
    MiddleName,
    LastName,
    COUNT(*) AS 'Count'
    FROM Person.Person TABLESAMPLE(10 PERCENT)
    GROUP BY FirstName, MiddleName,LastName;

あなたが何人いるか知りたい場合:

   SELECT COUNT(*) AS 'Count'
   FROM Person.Person TABLESAMPLE(10 PERCENT);
于 2013-08-23T14:25:40.810 に答える