鑑於以下select語句:T-SQL - 必須具備通過團體定期或聚合函數選擇
Select t.name, SUM(st.row_count) as row_count
From sys.dm_db_partition_stats st
join sys.tables t on t.object_id = st.object_id
join ClientUpdateConfig c on t.name = c.TableName
Where (index_id < 2) and schema_id = schema_id('dbo')
and t.type ='U'
group by t.name
我也想選擇c.RowID作爲附加字段。該查詢工作,因爲它是,但如果我變了樣1:
Select t.name, SUM(st.row_count) as row_count, c.RowID as current_row
我得到的錯誤:
Msg 8120, Level 16, State 1, Line 1 Column 'ClientUpdateConfig.RowID' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
有人能解釋爲什麼我需要在聚合函數的選擇值(我假設SUM)還是在組中選擇它?我不明白這個限制 - 如果我能理解爲什麼會發生這種情況,也許我可以調整我的查詢設計。
你不能添加'GROUP BY t.name,c.RowID'嗎?錯誤信息是不言自明的。如果選擇列表中的任何內容不是聚合,則還必須考慮GROUP BY。如果有重複的RowID並且只需要一個,則需要告訴SQL Server要使用哪一個(通常爲MIN或MAX)。 –
人們獲取關係數據庫最困難的事情之一就是聚合。 @ W00te,當您使用「GROUP BY」時,您正在爲每個輸出行選擇多個源行。你需要指定你想要哪個'RowId',因爲每個輸出行會有多個'RowID'值。 – JNK
謝謝指點。這是我經歷過幾次的那些事情之一,但是它總是在一年之間,因爲我只能在數據庫中進行非正常工作。它總是回來咬我:) –