2016-11-14 14 views
0

CASE STATEMENTのTHEN句でカラム名を変更できますか?これは私のコードがどのように見えるかですが、動作しません。 SQL CASE文変更THEN句のカラム名

SELECT 
    CASE 
     WHEN @IDWeeklySpecial = '107' 
      THEN 
       CASE 
       WHEN ISNULL(v.blnLeftHandDrive, 0) = 1 
        THEN [HANDEDNESS] = 'LHD' 
        ELSE [HANDEDNESS] = 'RHD' 
      ELSE 
       CASE 
       WHEN ISNULL(v.blnLeftHandDrive, 0) = 1 
        THEN STEERING = 'LHD' 
        ELSE STEERING = 'RHD' 
      END 
    END 

私はこの結果、これは達成可能である

My Ideal Result

にしたいですか?もしそうなら、どのように?

+0

あなたはいくつかのネストされた 'CASE'ステートメントを持ち、構文が間違っています。サンプルデータを使って、ここで何をしようとしているのかわかりますか? –

+0

これをすべて 'UPDATE'文でやってみようとしていますか? – dotnetom

+0

私はすでにうまくいけば、これは助けになるかもしれない質問を更新しました –

答えて

2

そのインラインケースを想定することはできません。

CASE式は、という値を返します。結果セットの列名を指定するには、別名を割り当てます。

SELECT CASE ... END AS mycolname 
     , ... 
    FROM ... 

文が解析されて準備されるときに、列名が決定されます。ステートメントの実行は列名を変更できません。


(それは私が質問を理解していなかったことが可能です。それは達成するために抱き合わせているものOPは明らかではありません。)

+0

私は感謝を見るが、私はこの問題を修正することができる任意のオプションがありますか? –

+0

私はすでにこの問題を解決することを知っていたことの一つは、動的クエリを使用することですが、私はそれらの事を避けようとしています。 –

+0

@ AlvinQuezon:1つのオプションは、SELECTステートメントの条件付きテスト*外*を行うことです。異なるエイリアスが列に割り当てられた2つの別個のSELECTステートメントを作成します。また、条件付きテストでは、実行する2つのSELECT文のどちらを決定するかを決定します。 – spencer7593

0

私はあなたのselect文を消化していますが、動的に結果セットに列名を変更することについて尋ねている場合はいいえ、それは...ことはできません

SELECT item_name = CASE WHEN item_name = 'sometext' THEN item_id ELSE item_name END AS MyColumnName 
0

case表現です。式の前後の列には名前を付けますが、中央には名前を付けません。

また、SQL文は、列名を含む固定列セットを返す必要があります。

したがって、単純なSQL文ではできないことがあります。 . . .があなたのSQLクエリの残りの部分であることを

declare @sql nvarchar(max); 
set @sql = ' 
SELECT (CASE WHEN COALESCE(v.blnLeftHandDrive, 0) = 1 
      THEN 'LHD' 
      ELSE 'RHD' 
     END) as [columnname] 
. . . '; 

set @sql = replace(@sql, '[columnname]', 
        (case when @IDWeeklySpecial = '107' then 'HANDEDNESS' else 'STEERING' end) 
       ); 

exec sp_executesql @sql; 

注:あなたは、動的SQLを使用することができます。

関連する問題