2016-11-14 53 views
0

無論如何,我可以通過CASE語句中的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:一種選擇是執行SELECT語句的*外*條件測試。編寫兩個單獨的SELECT語句,並將不同的別名分配給該列。並讓條件測試決定執行兩個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查詢的其餘部分。