在SQL中选择一个按列分组的*

时间:2014-07-12 19:57:54

标签: sql sql-server tsql

我想从表和组中select *只有一列。我是SQL的新手,所以基本的问题。我的查询看起来像这样。

Select top 10
    [DocumentClass], [DocumentUID]
    ,[DocumentClassification]
    ,[DocumentNumber]
    ,[Revision]
    ,[Description]
    ,[Owner]
from 
    Table
Group BY 
    [DocumentClass]

我收到错误:

  

列'DocumentUID'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。

请指教。感谢

2 个答案:

答案 0 :(得分:2)

如果您想为每个文档类获取一行,请使用row_number()代替group by

Select top 10 t.*
from (select t.*, row_number() over (partition by documentclass order by newid()) as seqnum
      from table t
     ) t
where seqnum = 1;

row_number()是枚举行的函数。在这种情况下,每个文档类将重新开始。 newid()只是一种选择随机行的方法。

通常,当您使用group by时,您还会有min()sum()等聚合函数。

答案 1 :(得分:0)

此错误表示SQL Server不知道您要使用哪个列。 当您使用GROUP BY命令时,您想要选择一个特定值(MIN,SUM或AVG)或者您想要所有(计算行数)。 您可以从本网站获取所有必要信息。 GROUP BY