首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MS SQL 2005 - order by collate with subquery失败

MS SQL 2005 - order by collate with subquery失败
EN

Stack Overflow用户
提问于 2010-11-03 19:59:27
回答 1查看 1.3K关注 0票数 0

这是一个真实查询的简化版本,用于显示问题。它可以在示例Adventureworks数据库上执行:

代码语言:javascript
复制
SELECT Person.Address.*,
 (SELECT TOP 1 [Name]
 FROM Person.StateProvince
 WHERE Person.StateProvince.StateProvinceId = Person.Address.StateProvinceId AND Person.StateProvince.TerritoryId IN (5, 6, 7)
 ORDER BY Person.StateProvince.TerritoryId) AS [Name]
FROM Person.Address
ORDER BY [Name]

这很有效,但我的问题是,如果我将排序规则添加到order by字段,我会得到一个奇怪的错误消息:

代码语言:javascript
复制
SELECT Person.Address.*,
 (SELECT TOP 1 [Name]
 FROM Person.StateProvince
 WHERE Person.StateProvince.StateProvinceId = Person.Address.StateProvinceId AND Person.StateProvince.TerritoryId IN (5, 6, 7)
 ORDER BY Person.StateProvince.TerritoryId) AS [Name]
FROM Person.Address
ORDER BY [Name] COLLATE Chinese_PRC_CI_AI

错误是:

代码语言:javascript
复制
Msg 207, Level 16, State 1, Line 7
Invalid column name 'Name'.

如果没有子查询,带有collate子句的查询工作得很好,但我需要这样(原因很复杂,但请相信我:)。

有谁知道这个查询失败的原因,以及可能的解决方法是什么?这是一个bug吗?

谢谢!亚当

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-11-03 20:40:35

SQL Server不允许在order by子句中按别名引用列。例如,这将不起作用:

代码语言:javascript
复制
select id+1 as x from MyTable order by x

但是您可以通过重复列定义来解决这个问题:

代码语言:javascript
复制
select id+1 as x from MyTable order by id+1

或者使用子查询:

代码语言:javascript
复制
select * from (select id+1 as x from MyTable) as subquery order by x

在您的示例中,最好的修复方法可能是使用子查询:

代码语言:javascript
复制
SELECT  *
FROM    (
        SELECT  Person.Address.*
        ,       (
                SELECT  TOP 1 [Name]
                FROM    Person.StateProvince
                WHERE   Person.StateProvince.StateProvinceId = 
                            Person.Address.StateProvinceId 
                        AND Person.StateProvince.TerritoryId IN (5, 6, 7)
                ORDER BY 
                        Person.StateProvince.TerritoryId
                ) AS [Name]
        FROM    Person.Address
        ) as SubqueryAlias
ORDER BY 
        [Name]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4086804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档