我有一个表Salary
(ID,名称,代码值,值)
ID | Name| Code_Value | Value
---------+-----+------------+---------
D4ABD930 | A | XP | 400287
6FE02B7A | B | AP | 1002
ABC12343 | C | PC | 10007
我希望“名称”列的值为“ A”,将有三行。每行都是另一个值。
我尝试选择以获取此结果:
Name | Code_Value | Value
-----+------------+------------
A | XP1 | 400287 *60
A | XP2 | 1002 *30
A | XP3 | 10007 *15
C | PC | 10007
B | AP | 1002
此代码引发错误。我写了描述结果:
select
Name,
(case
when Code_Value ='XP' then 'XP1'
when Code_Value ='XP' then 'XP2'
else 'XP3'
end),
value
from
Salary
帮助我解决此问题。谢谢。
答案 0 :(得分:2)
您可以为此使用join
和派生表:
select s.name, coalesce(v.code_value, s.code_value) as code_value,
s.value * coalesce(v.factor, 1)
from salary s left join
(values ('XP', 'XP1', 60),
('XP', 'XP2', 30),
('XP', 'XP3', 15)
) v(old_code_value, code_value, factor)
on v.old_code_value = s.code_value;