IF ELSE语句并插入新列

时间:2014-10-22 15:18:05

标签: sql oracle

我一直在网上尝试如何结合"如果"我的查询中的语句。假设我想创建一个查询,以便创建一个名为" Description"的额外列,然后包含一个if else语句,以便" If Value =" A"然后描述=" A",如果值=" B"然后描述=" B",依此类推。问题是,因为我对数据库的访问权限最小(不是管理员)。我无法创建表格。我只能查询oracles中的表并将其导出。在创建额外列时会出现问题吗?

原文:

ID Value  
1  A  
2  B   
3  C

想要类似的东西:

ID Value Description(New Column)  
1  A     Apple  
2  B     Bacon  
3  C     Candy

好。我不知道我在下面做了什么,但它会是那样的?我在哪里插入名为&#34的新列;描述"?

Select A.ID, B.Value  
From Table A  
Join Table B  
On A.ID = B.ID  
Where ID in ('1','2','3')  
If b.Value = 'A' then  
   (Description = "Apple")  
If b. value = 'B' then  
   (Description = "Bacon")
Group by A.ID, B.Value

3 个答案:

答案 0 :(得分:5)

您可以使用CASE

SELECT A.ID, B.Value,
       CASE B.Value
            WHEN 'A' THEN 'Apple'
            WHEN 'B' THEN 'Bacon'
            WHEN 'C' THEN 'Candy'
       END AS Description
FROM TableA A
JOIN TableB B ON A.ID = B.ID

答案 1 :(得分:1)

你可以像下面这样做

SELECT A.ID, A.Value, B.Description
FROM TABLEA A
JOIN ( SELECT 'A' as Value, 'Apple' as Description from dual
       UNION
       SELECT 'B' as Value, 'Bacon' as Description from dual
     ) T
on A.Value= B.Value

答案 2 :(得分:0)

我不确定为什么你需要加入桌子。另外,我认为你并不是真的想用一个名为“table”的表来做这件事。

CASE会做这项工作,就像Barmar的回答一样。当逻辑很简单时,我发现DECODE更具可读性,但它确实是一种品味问题。 CASE更灵活,这不是品味问题,但你不需要这种灵活性。

select  id
       ,value
       ,decode( value
                 ,'A', 'Apple'
                 ,'B', 'Bacon'
                 ,'C', 'Candy' ) as Description
from table;