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

时间:2013-05-29 12:48:57

标签: sql sql-server sql-server-2005

我试图返回一个表格,其中包含使用嵌套集合模型表示的层次结构中的节点深度,我遵循本教程,但查询中使用的查询'查找节点的深度'对我不起作用:http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/

SELECT node.GroupName, (COUNT(parent.GroupName) - 1) AS depth
FROM CompanyGroup AS node,
        CompanyGroup AS parent
WHERE node.LeftID BETWEEN parent.LeftID AND parent.RightID
GROUP BY node.GroupName
ORDER BY node.LeftID;

运行此查询我收到错误" Column' CompanyGroup.GroupName'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。"

有人可以解释为什么吗?

编辑:错误消息中的列错误,我的道歉错误是:" Column" CompanyGroup.LeftID"无效...... "

3 个答案:

答案 0 :(得分:5)

试试这个 -

SELECT 
      node.GroupName
    , depth = COUNT(parent.GroupName) - 1
FROM CompanyGroup node
JOIN CompanyGroup parent ON node.LeftID BETWEEN parent.LeftID AND parent.RightID
GROUP BY node.GroupName
ORDER BY MIN(node.LeftID) --<--

或试试这个 -

SELECT 
      node.GroupName
    , depth = COUNT(parent.GroupName) - 1
FROM CompanyGroup node
JOIN CompanyGroup parent ON node.LeftID BETWEEN parent.LeftID AND parent.RightID
GROUP BY node.GroupName, node.LeftID
ORDER BY node.LeftID

答案 1 :(得分:2)

您是否正在运行其他查询?您不应该收到该特定错误,而是"Column "CompanyGroup.LeftID" is invalid in the ORDER BY..."

此查询应该有效:

SELECT node.GroupName, (COUNT(parent.GroupName) - 1) AS depth
FROM CompanyGroup AS node,
        CompanyGroup AS parent
WHERE node.LeftID BETWEEN parent.LeftID AND parent.RightID
GROUP BY node.GroupName
;

答案 2 :(得分:0)

我不认为这是你从你发布的查询中收到的错误 - 你确定你没有弄乱它吗?

无论如何,这里还有其他问题:你正在使用node.LeftID订购结果,但是你不能这样做。您应该收到此消息:

Column "node.LeftID" is invalid in the ORDER BY clause because it is not contained in either an aggregate function or the GROUP BY clause.

尝试删除ORDER BY并再次运行。