2013-04-11 164 views
2

我坚持这个错误:SQL查询错误

Msg 8120, Level 16, State 1, Line 2 Column 'Subjects.off_CODE' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

我不知道什么是错的这个查询。

use Enlistment 
go 

SELECT Subjects.off_CODE, Subjects.subj_CODE, Subjects.description, 
Subjects.unit, COUNT(Enlistment.off_CODE) FROM Enlistment, Subjects 
WHERE Subjects.off_CODE = 11315 
GROUP BY Enlistment.off_CODE 
+1

我想是这样,你使用的是MSSQL ..你需要使用所有比总一个GROUP BY子句中。在这样的条款的其他组的列将是'GROUP BY Subjects.off_CODE,Subjects.subj_CODE,主题.description, Subjects.unit' – Meherzad 2013-04-11 14:46:57

+3

您是否知道您正在桌子之间执行笛卡尔产品? – Lamak 2013-04-11 14:48:16

+0

谢谢你Meherzad。 – eaponz 2013-04-11 14:52:33

回答

1

如果选择了列时,它必须出现在GROUP BY子句,除非它被包含在聚合函数(就像错误消息指出)。

use Enlistment 
go 

SELECT Subjects.off_CODE, Subjects.subj_CODE, Subjects.description, 
Subjects.unit, COUNT(Enlistment.off_CODE) FROM Enlistment, Subjects 
WHERE Subjects.off_CODE = 11315 
GROUP BY Subjects.off_CODE, Subjects.subj_CODE, Subjects.description, 
Subjects.unit 

所以,在你的榜样,被包含在GROUP BY子句所选择的唯一字段没有为Enlistment.off_CODE,因为它是在聚合函数COUNT(使用COUNT( Enlistment.off_CODE))。所有其他字段必须包含在GROUP BY子句中。

0

你试试这个:

GROUP BY Enlistment.off_CODE, Subjects.off_CODE 

SELECT DISTINCT Subjects.off_CODE, Subjects.subj_CODE, Subjects.description, 
Subjects.unit, COUNT(Enlistment.off_CODE) FROM Enlistment, Subjects 
WHERE Subjects.off_CODE = 11315 
GROUP BY Enlistment.off_CODE, Subjects.off_CODE 

+0

仍然有同样的错误。 – eaponz 2013-04-11 14:48:44

0

你告诉查询到GROUP BY,你是不是选择列。您将需要确保您选择包含在GROUP BY字段中的列。

@ Question3CPO的会不同的是它包含在SELECT语句Subjects.subj_CODE工作,那就是在函数中可能不包含。