2013-04-30 158 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 ....