[英]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.