2013-04-30 161 views
3

我想添加一個額外的列。這個額外的列將獲得基於案例陳述的值。我的目標是,例如,雖然語法錯誤,但要做到這一點:當'A','Apple'和'ExtraColumn'= 1時。我試圖使用下面的代碼創建一個equvialnt,但我得到一個錯誤,我的SQL語法不正確。多個THEN到單個CASE語句?

select Patient, 
case ColumnName 
when 'A' then 'Apple' 
when 'B' then 'Banana' 
end ColumnName, 
case ExtraColumn 
when 'A' then '1' 
when 'B' then '2' 
end ExtraColumn, 

ColumnResult 
from TABLE 

unpivot 
(
ColumnResult 

for ColumnName in (COL1,COL2,COL3) 

for ExtraColumn in (COL1,COL2,COL3) 

)u 

回答

5

您必須爲每個列名重複您的案例結構。類似這樣的:

case ColumnName 
when 'A' then 'Apple' 
when 'B' then 'Banana' 
end ColumnName, 

case ColumnName 
when 'A' then '1' 
when 'B' then '2' 
end ExtraColumn, 

這裏有一個問題。如果您在where子句中使用ColumnName,則可能不喜歡結果,因爲您將它用作別名。

編輯在這裏

開始你可以做任何你希望你的別名。如果它們很簡單,只需鍵入它們。

select column1 fred, column2 barney 

如果你想超過一個字,或一個SQL關鍵字,用雙引號

select column1 "fred flinstone", column2 "select" 
+0

感謝您的答覆。這個概念有效,但現在我有2列,一列叫'ColumnName',第二列是'ColumnName_1'。無論如何要改變'ColumnName_1'來閱讀我指定的東西嗎? – user2213892 2013-04-30 22:05:26

1

可以使用decode

select decode(ColumnName ,'A', 'Apple','B','Banana', 'Unknown') from ....