如何在SQL Server中按类别分组使用case语句

时间:2018-11-19 04:44:51

标签: sql sql-server tsql case

我有一张下表

Id   Values    
 1     A          
 1     A          
 1     B          
 2     @          
 2     @
 2     @
 3     A
 3     A
 3     A
 3     A
 3     @
 4     B
 4     B
 4     B

输出:

Id   Values
 1     @
 2     @
 3     A
 4     B

在每个Id组中,如果所有值均为@,我想将该Id的值设置为@ 否则,如果Id的所有值都相同(忽略@)(例如所有A),则将该Id的值设置为该值({{1 }})否则将id的值设置为A

如何运行该@语句为CASE中的每个Id赋予一个唯一值?

SQL Server的新手,请帮忙。

1 个答案:

答案 0 :(得分:1)

GROUP BY上使用ID,并检查MIN ()MAX ()。如果min = max表示所有值都相同。

对于您来说,扭曲是@。应该忽略。诀窍是在NULLIF()上使用@

select  id,
        case    when    min(NULLIF([Values], '@')) = max(NULLIF([Values], '@'))
                and     min(NULLIF([Values], '@')) <> '@'
                then    min(NULLIF([Values], '@'))
                else    '@'
                end
from    yourtable
group by id