我有下面的表结构,我想通过使用 case 关键字按顺序使用我在 select 语句中使用的函数。但我收到错误消息,指出 FullName 是无效列。
CREATE TABLE STUDENTS
(
ID INT IDENTITY(1, 1) ,
FirstName VARCHAR(50) ,
LastName VARCHAR(50)
)
向表 STUDENTS 中插入一些数据
INSERT INTO STUDENTS
VALUES ( 'kamal', 'sharma' )
INSERT INTO STUDENTS
VALUES ( 'john', 'jack' )
INSERT INTO STUDENTS
VALUES ( 'Rahul', 'Thomson' )
此语句有效
SELECT
ID
, FirstName + ' ' + LastName AS FullName
FROM STUDENTS
ORDER BY FullName ASC
我需要这个,但它说 FullName 是无效列。
DECLARE @VAL INT
SET @VAL = 1
SELECT ID
,FirstName + ' ' + LastName AS FullName
FROM STUDENTS
ORDER BY CASE
WHEN @VAL = 1
THEN FullName
END ASC
,CASE
WHEN @VAL = 2
THEN FullName
END DESC
Msg 207, Level 16, State 1, Line 10
Invalid column name 'FullName'.
Msg 207, Level 16, State 1, Line 14
Invalid column name 'FullName'.
预先感谢您的帮助。
最佳答案
在 SELECT
中定义的列别名不能在相应 ORDER BY
的表达式内部使用。
要么重复底层定义。
SELECT ID
,FirstName + ' ' + LastName AS FullName
FROM STUDENTS
ORDER BY CASE
WHEN @VAL = 1
THEN FirstName + ' ' + LastName
END ASC
,CASE
WHEN @VAL = 2
THEN FirstName + ' ' + LastName
END DESC
或者在不同级别定义别名。例如派生表或 CTE。
WITH T
AS (SELECT ID,
FirstName + ' ' + LastName AS FullName
FROM STUDENTS)
SELECT *
FROM T
ORDER BY CASE
WHEN @VAL = 1 THEN FullName
END ASC,
CASE
WHEN @VAL = 2 THEN FullName
END DESC
关于sql - 在 SQL Server 中使用按大小写顺序在 select 语句中使用的函数时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17313865/