2

我尝试运行如下 sql 查询(mssql 2005):

select top 20 d_date, date1, date2 
from reestr_calculated 
where reestr_id=2 
group by date2 
order by date2 desc

我收到以下错误:

列 'reestr_calculated.d_date' 在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中。

有谁知道我该如何处理这个错误?

4

3 回答 3

3

除非您使用聚合函数,否则存在的所有列名都SELECT必须存在。GROUP BY因此,在 group by 中也添加 date1。

于 2013-07-02T11:29:34.333 回答
0

当您使用 时GROUP BY,多行会“折叠”成一行。要确定应显示组中的哪些行,您必须使用聚合函数。

喜欢MIN()SUM()或其他。

像这样:

select top 20 MIN(d_date), MAX(date1), date2 
from reestr_calculated 
where reestr_id=2 
group by date2 
order by date2 desc

或像这样:

select top 20 d_date, date1, date2 
from reestr_calculated 
where reestr_id=2 
group by d_date, date1, date2 
order by date2 desc
于 2013-07-02T11:30:04.037 回答
0

您按 分组,这意味着为每个值date2返回一行。date2每个date2值可以有多个d_dateordate1值,因此 SQL 不知道要为每个值返回哪些值。

正如错误所说,您需要一个聚合函数(MAX(),MIN()AVG())或在 GROUP BY 子句中包含其他列

于 2013-07-02T11:31:13.547 回答