我有一张下表
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
的新手,请帮忙。
答案 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