转换Decode(从oracle到sql server的情况)

时间:2017-03-20 08:00:10

标签: sql-server case

你好我在oracle中有这部分脚本,我需要在Microsfot Sql Server中移动它:

CASE (DECODE(Employee.title, 'assistant',  
         nvl(Employee.title, 'NULL'))) 
      WHEN 'programmer' then 'level1'  
      WHEN 'engineer' then 'level2'  -

        ELSE 'other'  
        end as x, 

有人可以帮我说明一下这是对的吗?

2 个答案:

答案 0 :(得分:0)

据我了解decode的功能,您似乎需要的是:

CASE
    WHEN Employee.Title = 'assistant' THEN 'level0'
    WHEN Employee.Title = 'programmer' THEN 'level1'
    WHEN Employee.Title = 'engineer' THEN 'level2'
    WHEN Employee.Title IS NULL THEN 'NULL'
    ELSE 'other'
END AS x

很遗憾,您的DECODE声明似乎与要求不符。

有关信息,在Oracle SQL中,DECODECASE的一种形式,如下所示:

select id, decode(status,'A','Accepted','D','Denied','Other')
from   contracts;

将为每个ID返回:

  

如果状态=' A' :'接受'
  如果状态=' D' :'拒绝'
  另外:'其他'

答案 1 :(得分:0)

您的脚本与此相同,

CASE Employee.title WHEN 'assistant' THEN 'assistant'
      WHEN 'programmer' then 'level1'  
      WHEN 'engineer' then 'level2'
      ELSE 'other'  
 END AS X

但是从逻辑的角度看你的原始剧本似乎并不完全正确。

部分

DECODE(Employee.title, 'assistant',  
         nvl(Employee.title, 'NULL'))
在我看来,总是回到'助手'。

If Employee.title = 'assistant' - > THEN获取Employee.title'NULL'之间的第一个非空值。但是Employee.title = 'assistant' ......