如何基于SQL Server中的值存在设置值?

时间:2019-04-14 12:39:32

标签: sql sql-server

我有以下T-SQL代码:

select 
    id,
    (case
        when n in(Bla1', 'Bla2') then 1
        when n = 'Bla3' then 99
        else 0
     end) as c
from 
    hello

运行此代码将输出以下结果:

|  id    | c  |
+--------+----+
| 577140 | 0  |
| 577140 | 1  |
| 577140 | 0  |
| 577140 | 0  |
| 577140 | 99 |
| 577141 | 0  |
| 577141 | 0  |
| 577141 | 0  |
| 577142 | 0  |
| 577142 | 0  |
| 577142 | 1  |

如何修改代码以获取以下输出?

|  id    | c  |
+--------+----+
| 577140 | 99 |
| 577141 | 0  |
| 577142 | 1  |

规则

对于每个id:如果存在99,则c变为99。如果不存在,则根据是否存在1来确定01

1 个答案:

答案 0 :(得分:1)

您可以使用聚合:

select id,
       max(case when n in ('Bla1', 'Bla2') then 1
                when n = 'Bla3' then 99
                else 0
           end) as c
from hello
group by id;