我对SQL Server感到非常沮丧。我只是想加入3个表,非常简单,并且很容易在mysql中完成。但在SQL Server中,它一直告诉我在聚合函数中包含tbl_department.deptname
。但是我可以在一个简单的字符串中使用哪些聚合函数?
SELECT
COUNT(tblStudent_Department.student_id) AS Expr2,
tbl_department.deptname AS Expr1
FROM
tblStudent_Department
LEFT OUTER JOIN
tbl_department ON tblStudent_Department.deptcode = tbl_department.deptcode
LEFT OUTER JOIN
tblStudent ON tblStudent_Department.student_id = tblStudent.studentid
GROUP BY
tblStudent_Department.deptcode
请帮忙。
答案 0 :(得分:7)
数据库不知道如果您对deptcode
进行分组,则会在deptname
上隐式分组。您必须通过将列添加到group by
:
GROUP BY tblStudent_Department.deptcode, tbl_department.deptname
MySQL的特殊之处在于,如果你没有指定聚合,它基本上会选择一个随机行。这可能会产生误导并导致错误的结果。与许多其他事情一样,MySQL有更实用的解决方案,而SQL Server则更正确。
答案 1 :(得分:1)
问题是因为您的GROUP BY
和SELECT
条款不匹配。
解决此问题的最简单方法是将tbl_department.deptname
添加到GROUP BY
中,如下所示:
GROUP BY tblStudent_Department.deptcode, tbl_department.deptname
答案 2 :(得分:1)
你是按照deptcode分组但是选择了deptname - 如果你不想聚合部门(这听起来很合理)那么你需要在“group by”语句中使用deptname:
SELECT COUNT(tblStudent_Department.student_id) AS Expr2, tbl_department.deptname AS Expr1
FROM tblStudent_Department
LEFT OUTER JOIN tbl_department ON tblStudent_Department.deptcode = tbl_department.deptcode
LEFT OUTER JOIN tblStudent ON tblStudent_Department.student_id = tblStudent.studentid
GROUP BY tblStudent_Department.deptname
注意我删除了deptcode,因为我觉得你不需要它
如果您正在使用聚合函数(求和,计数等),则select语句中返回的所有字段都需要聚合或在group by子句中。
答案 3 :(得分:0)
首先,最后,或者将其放入群组中。
规则是:
如果您选择tbl_department.deptname,那么您也必须按此分组,或者说要采取WHICH ONE。
一些聚合函数伪造得很好 - 第一,最后(第一次或最后一次发生)。