【问题标题】:GROUP-BY expression must contain at least one column that is not an outer referenceGROUP-BY 表达式必须包含至少一列不是外部引用
【发布时间】:2012-10-04 07:31:29
【问题描述】:

我有这个疑问:

SELECT
SolutionName    -- Solution_NAM
from  Table_View
Group By 1

其中 Table_View 当然是一个视图。 我收到这条错误消息:

每个 GROUP BY 表达式必须包含至少一列不是外部引用。

你能帮我解决这个问题吗? 它在 MS SQL Server 2008 中

【问题讨论】:

  • 你想做什么?您不能在 SQL Server 中按列序号分组。您需要指定名称。

标签: sql-server sql-server-2008 tsql


【解决方案1】:

你不能给 Group by 1

试试

SELECT
SolutionName    -- Solution_NAM
from  Table_View
Group By SolutionName

【讨论】:

    【解决方案2】:

    Martin 关于 GROUP BY 的陈述是正确的,尽管在各种 SQL 版本中,您 >can

    但明智的做法是不要在 ORDER BY 语句中使用列序号,即使它们确实有效。为什么?如果查询是存储过程的一部分,并且通过向原始表(或视图)添加列来更改表模式,则无法保证原始列的顺序将通过更改来保持。这意味着您可能会按一个无意且无意义的列进行排序,这会破坏您的应用程序。

    每次都使用列名而不是序数是更好的做法(尽管像 count(*),但如果它是临时查询供您自己使用且永远不会出现,请不要挂断电话正在生产中)。

    【讨论】:

    • 使用 Ordinals 的查询确实会使长期维护变得复杂,而且对于开发人员和 DBA 等人来说,从参考查询开始并在没有注意到 Ordinal 的情况下更改它也很容易语句可能具有不同的含义。使用明确的列名或表达式可以减少这类问题。如果结果集中不存在您的表达式,您也不能使用 Ordinal ;)
    猜你喜欢
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 2014-06-18
    • 2020-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多