2014-07-12 39 views
-1

我想要select *從一個表和組只有一列。我是SQL新手,所以有一個基本的問題。我的查詢看起來像這樣。在SQL中選擇*與一個按列分組

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

錯誤我得到:因爲它不是在聚合函數或GROUP BY子句中包含

列「DocumentUID」在選擇列表中無效。

請指教。謝謝

+1

當您使用組選擇查詢中的所有列時,必須將其添加到組by子句。您只能使用select語句中的列(MAX,SUM,COUNT等)的摘要。閱讀http://msdn.microsoft.com/en-us/library/ms177673.aspx –

+0

謝謝..所以這意味着我必須把所有列在分組依據,這是在查詢的選擇條款...但將它做的分組結果通過一個特定的列? – dnts2012

+0

絕對不是。但這取決於你想從Group By中得到什麼摘要。由於您正在對記錄進行分組,因此如果行在不同列中具有不同的值,顯然它們將被視爲單獨的組。在內部查詢中進行分組後,您將不得不使用內部查詢或CTE來檢索最終結果 –

回答

0

此錯誤意味着SQL Server不知道您要使用哪一列。 當您使用GROUP BY命令時,您想要選擇一個特定值(MIN,SUM或AVG)或者您希望所有(計數那些行)。 您從本網站獲得所有必要的信息。 GROUP BY

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()