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 回答