2014-09-26 95 views
0

初学者SQL问题:不能按年分组

我正在尝试按年份分组,并且我得到了有趣的结果。我使用SQL Server 2008的

首先,我想

select count(applicationkey) , approveddate from ida.applications group by approveddate

要获得通过最新的应用程序的计数。然而,我感兴趣的应用程序通过一年的日子代替,所以我尝试

select count(applicationkey) , approveddate from ida.applications group by year(approveddate)

当我这样做,我得到一个错误信息-Column“ida.applications.ApprovedDate”在选择列表中无效因为它不是在聚合函数或GROUP BY包含clause.-

但是,如果我这样做,我得到的结果

select count(applicationkey) from ida.applications group by year(approveddate)

我得到的结果。它只是我希望能够看到哪一年符合哪个计数,这是我因为某些原因而无法完成的。有谁知道我为什么有这个问题?

+0

您必须在您所查询的任何非聚集列组。如果你按年份分组,那么你需要选择'year(approveddate)'而不是'approvedate' – LittleBobbyTables 2014-09-26 14:57:17

+0

Ravi,一个普通的问题提示提示:你可以包括诸如platform(sql-server)和version sql-server-2008)作为标签在你的问题。你在你的问题中提到了它们,这已经让你领先于很多提问者,但首选的方法是将它们作为标签包含在内。您可以通过点击原始问题下的“编辑”一词来完成此操作:) – AHiggins 2014-09-26 15:10:03

回答

2
select count(applicationkey), 
     year(approveddate) 
    from ida.applications 
group by year(approveddate) 

group by必须如果不使用聚合匹配select领域。

1

你都正确的零件在那里,只是在您选择的year(approveddate)像这样

select count(applicationkey), year(approveddate) 
from ida.applications 
group by year(approveddate) 
1

在组查询,选中的列必须是集合函数,或者出现在group-by列表中,因为否则SQL将不知道要使用的组中的列的多个值中的哪一个。

您可以通过使用

select count(applicationkey) , year(approveddate) 
from ida.applications group by year(approveddate) 

轻松解决您的查询 - 这是今年显示为GROUP BY列表