2013-07-25 18 views
1

得到以下错误:外部引用错误,当分组月和年

Each GROUP BY expression must contain at least one column that is not an outer reference 

我想有calculatedDrugDistributionHistory通过facilty,月,年的分组列表。我只想盘点哪些月份已导入系统的设施。

我有这个疑问:

select 
    f.name, 
    MONTH(cddh.dateGiven) as 'date_month', 
    YEAR(cddh.dateGiven) as 'date_year' 
from 
    calculatedDrugDistributionHistory cddh 
     inner join facilityIndividuals fi on fi.facilityIndividualId = cddh.facilityIndividualId 
     inner join facilities f on fi.facilityId = f.facilityId 
group by 
    f.name, 
    'date_month', 
    'date_year' 
order by 
    f.name, 
    'date_month', 
    'date_year' 
+0

你正在得到的错误是因为'date_month'和'date_year'一旦这个分组被执行后,就会进入画面。 –

回答

0

不能在组使用别名by子句。试试这种方式:

select 
    f.name, 
    MONTH(cddh.dateGiven) as date_month, 
    YEAR(cddh.dateGiven) as date_year 
from calculatedDrugDistributionHistory cddh 
inner join facilityIndividuals fi on fi.facilityIndividualId = cddh.facilityIndividualId 
inner join facilities f on fi.facilityId = f.facilityId 
group by 
    f.name, 
    MONTH(cddh.dateGiven), 
    YEAR(cddh.dateGiven) 
order by 
    f.name, 
    date_month, 
    date_year 
+0

感谢resposne Parado - 你的回答是有道理的,但我得到的错误是'dateGiven'在选择列表中无效,因为它不包含在聚合函数或GROUP BY中 – etm124

0

两个问题。首先,您将单引号用于列别名。使用双引号或方括号。其次,你需要包括select子句中的所有列,而不聚集功能应该是在group by

select f.name, MONTH(cddh.dateGiven) as date_month, YEAR(cddh.dateGiven) as date_year' 
from calculatedDrugDistributionHistory cddh 
     inner join facilityIndividuals fi on fi.facilityIndividualId = cddh.facilityIndividualId 
     inner join facilities f on fi.facilityId = f.facilityId 
group by f.name, MONTH(cddh.dateGiven), YEAR(cddh.dateGiven) 
order by f.name, date_month, date_year; 

您可以使用列别名在order by,而不是group by

0

GROUP BY不能使用别名,如果你能,你不应该将它们与单引号写:

select 
    f.name, 
    MONTH(cddh.dateGiven) as date_month, 
    YEAR(cddh.dateGiven) as date_year 
from 
    calculatedDrugDistributionHistory cddh 
     inner join facilityIndividuals fi on fi.facilityIndividualId = cddh.facilityIndividualId 
     inner join facilities f on fi.facilityId = f.facilityId 
group by 
    f.name, 
    MONTH(cddh.dateGiven), 
    YEAR(cddh.dateGiven) 
order by 
    f.name, 
    date_month, 
    date_year 
0
SELECT 
name, 
date_month, 
date_year 

FROM 

(select F.NAME,MONTH(cddh.dateGiven) as date_month, 
    YEAR(cddh.dateGiven) as date_year 

from 
    calculatedDrugDistributionHistory cddh 
     inner join facilityIndividuals fi on fi.facilityIndividualId = cddh.facilityIndividualId 
     inner join facilities f on fi.facilityId = f.facilityId)TEMP 
group by 
    name, 
    date_month, 
    date_year 
order by 
    name, 
    date_month, 
    date_year 

请使用此更新

问候

Ashutosh Arya

相关问题