你好我在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,
有人可以帮我说明一下这是对的吗?
答案 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中,DECODE
是CASE
的一种形式,如下所示:
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'
......