如何选择唯一值条件的多行

时间:2019-09-24 11:15:15

标签: sql sql-server

我有一个表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

帮助我解决此问题。谢谢。

1 个答案:

答案 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;