4

以下のテーブル構造があり、select ステートメントで使用した関数を case キーワードを使用して順番に使用したいのですが、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'.

助けてくれてありがとう。

4

5 に答える 5

5

で定義された列の別名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 
于 2013-06-26T07:22:54.117 に答える
2

これを次のように変更します。

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
于 2013-06-26T07:23:39.943 に答える
0

以下のスクリプトを試してください:

 SELECT ID
            ,FirstName + ' ' + LastName AS FullName
        FROM STUDENTS
        ORDER BY FirstName + ' ' + LastName ASC
于 2013-06-26T07:47:21.077 に答える