Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 列在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中_Sql_Sql Server_Sql Server 2005 - Fatal编程技术网

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

Sql 列在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,我试图返回一个表,其中包含使用嵌套集模型表示的层次结构中的节点深度,我遵循本教程,但“查找节点深度”一节中使用的查询不适用于我: 运行此查询时,出现错误“列'CompanyGroup.GroupName'在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中。” 谁能解释一下原因吗 编辑:错误消息中的列错误,我很抱歉错误是:“column”CompanyGroup.LeftID“无效…”请尝试此列- SELECT node.GroupName , depth =

我试图返回一个表,其中包含使用嵌套集模型表示的层次结构中的节点深度,我遵循本教程,但“查找节点深度”一节中使用的查询不适用于我:

运行此查询时,出现错误“列'CompanyGroup.GroupName'在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中。”

谁能解释一下原因吗

编辑:错误消息中的列错误,我很抱歉错误是:“column”CompanyGroup.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
ORDER BY MIN(node.LeftID) --<--

您正在运行另一个查询吗?您不应该收到该特定错误,而是类似于“
”列“CompanyGroup.LeftID”的内容按…的顺序无效。

此查询应适用于以下情况:

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
;

    • 我不认为这是您从发布的查询中收到的错误-您确定没有弄糟吗

      无论如何,这里还有一个错误:您使用
      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.
      

      请尝试按删除订单,然后再次运行。

      您搜索过此错误吗?这就是您正在运行的查询吗?非常有效,谢谢。出于兴趣,你能解释一下这个问题吗?@Jim Barton,当你使用group by时,select/order子句中的每一列都必须通过聚合函数(如MAX、MIN、AVG等)来定义,或者必须包含在group 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
      ;
      
      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.