T-SQL - 必须在group by或aggregate函数中选择

Joh*_*0te 4 sql t-sql database sql-server sql-server-2008

给出以下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
Run Code Online (Sandbox Code Playgroud)

我还想选择c.RowID作为附加字段.查询按原样运行,但如果我像1那样更改为:

Select t.name,  SUM(st.row_count) as row_count, c.RowID as current_row
Run Code Online (Sandbox Code Playgroud)

我收到错误:

消息8120,级别16,状态1,行1列"ClientUpdateConfig.RowID"在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中.

有人可以解释为什么我需要聚合函数中的选择值(我假设是SUM)或者在group by中选择它吗?我不明白这个限制 - 如果我能理解为什么会这样,我可以调整我的查询设计.

Gor*_*off 7

因为它不知道选择哪个RowId.

你需要:

. . .
group by t.name, RowId
Run Code Online (Sandbox Code Playgroud)

要么:

select . . ., min(RowId) -- or max(RowId)
Run Code Online (Sandbox Code Playgroud)

即使您知道每个名称只有一个RowId,数据库也不知道,因此您必须明确说明您要在查询中执行的操作.