sql-server - 无法在 SQL Server 2012 中按别名排序

标签 sql-server tsql sql-server-2012

我正在使用 SQL Server 2012,版本 11.0.3000.0

我有这样的查询:

SELECT              
        BAUSER.USER_FNM + ' ' + BAUSER.USER_LNM AS USER_FULL_NAME               
        FROM 
            CAORAC CAORAC INNER JOIN CAACCO CAACCO
            ON CAORAC.ACCO_KEY = CAACCO.ACCO_KEY
            INNER JOIN BAUSER BAUSER
            ON CAORAC.USER_KEY = BAUSER.USER_KEY
        ORDER BY
            CASE WHEN @cOrderBy = 'cUSER_FULL_NAME ASC'      THEN USER_FULL_NAME END ASC,
            CASE WHEN @cOrderBy = 'cUSER_FULL_NAME DESC'     THEN USER_FULL_NAME END DESC

正在抛出错误:

Msg 207, Level 16, State 1, Line 21
Invalid column name 'USER_FULL_NAME'.

为什么我不能通过 USER_FULL_NAME 订购?我知道按别名排序是可能的,为什么在这种情况下在此特定列中不可能?

最佳答案

是的,您可以在 order by 中使用它,但不能在 case 语句中使用

CREATE VIEW NAME
AS
SELECT BAUSER.USER_FNM + ' ' + BAUSER.USER_LNM AS USER_FULL_NAME --, next cols
FROM CAORAC CAORAC INNER JOIN CAACCO CAACCO
    ON CAORAC.ACCO_KEY = CAACCO.ACCO_KEY
    INNER JOIN BAUSER BAUSER
    ON CAORAC.USER_KEY = BAUSER.USER_KEY


SELECT              
    USER_FULL_NAME AS USER_FULL_NAME,
    CASE WHEN @cOrderBy = 'cUSER_FULL_NAME ASC' THEN USER_FULL_NAME END USER_FULL_NAME_ASC ,
    CASE WHEN @cOrderBy = 'cUSER_FULL_NAME DESC' THEN USER_FULL_NAME END USER_FULL_NAME_DESC
FROM NAME
ORDER 
    USER_FULL_NAME_ASC ASC,
    USER_FULL_NAME_DESC DESC

或者您也可以将案例添加到您的 View 中。这取决于目的,但它可以作为表值函数的候选者。或者,如果您更喜欢更复杂的 qry,您可以使用派生表(而不是 View )。

关于sql-server - 无法在 SQL Server 2012 中按别名排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40670946/

相关文章:

c# - 在进程终止时更新 SSIS 自定义组件中的变量不持久

java - Spring Integration - Microsoft SQL Server 2012 的消息存储配置

sql - SQL 复杂数据透视表

sql - 如何在游标内的动态查询中为参数赋值

sql - 使用 JOIN 和 RANK() 进行查询的性能问题

sql-server - 字符长度的 900 字节索引大小限制

c# - SqlBulkCopy 是否自动启动事务?

sql - 如何在SQL Server 2008中执行函数

sql - 仅当给定查询不存在记录时,如何继续执行下一个任务?

sql - tsql、access sql和pl/sql的区别