簡體   English   中英

T-SQL - 必須在group by或aggregate函數中選擇

[英]T-SQL - Must have term in group by or aggregate function to select

給出以下select語句:

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

我收到錯誤:

消息8120,級別16,狀態1,行1列“ClientUpdateConfig.RowID”在選擇列表中無效,因為它不包含在聚合函數或GROUP BY子句中。

有人可以解釋為什么我需要聚合函數中的選擇值(我假設是SUM)或者在group by中選擇它嗎? 我不明白這個限制 - 如果我能理解為什么會這樣,我可以調整我的查詢設計。

因為它不知道選擇哪個RowId。

你需要:

. . .
group by t.name, RowId

要么:

select . . ., min(RowId) -- or max(RowId)

即使您知道每個名稱只有一個RowId,數據庫也不知道,因此您必須明確說明您要在查詢中執行的操作。

查詢結果基於多個ROWS的聚合。 您使用相同的t.name以及它們的許多不同的st.row_count值來獲取許多行並創建一行( t.name對於每個聚合行和它們所有t.row_count值的總和相同)。 對於這樣的聚合, c.Row_ID沒有明顯的價值。 您分組的每一行都有不同的值,並且無法確定應使用的值。 如果RowID是數字,您可以對所有ID進行平均或求和,或者取最小(最小)或最大(最大)。 並不是說它有任何意義 這樣的值對於聚合來說就是存在的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM