我正在使用 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/