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

如何在SQL Server中按类别分组使用case语句,sql,sql-server,tsql,case,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值 1A 1A 1b 2 @ 2 @ 2 @ 3A 3A 3A 3A 3

我有一张桌子

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值 1A 1A 1b 2 @ 2 @ 2 @ 3A 3A 3A 3A 3 @ 4 B 4 B 4 B 输出:

Id Values 1 @ 2 @ 3 A 4 B Id值 1 @ 2 @ 3A 4 B 在每个
Id
组中,如果所有值都是
@
,我想将该
Id
的值设置为
@
否则,如果
Id
的所有值都相同(忽略
@
s)(例如,所有
A
s),则将该
Id
的值设置为该值(
A
),否则将Id的值设置为

如何运行
CASE
语句,为
sqlserver
中的每个
Id
赋予一个唯一的值


SQL Server的新手,请提供帮助。

ID
上使用
GROUP BY
,并检查
MIN()
MAX()
。如果最小值=最大值,则所有值都相同

对于您的情况,扭转是
@
。它应该被忽略。诀窍是在
@

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 
选择id,
最小值(NULLIF([值],'@'))=最大值(NULLIF([值],'@'))时的情况
和min(空值([值],“@”))“@”
然后是min(NULLIF([Values],'@'))
其他'@'
终止
从你的桌子上
按id分组

您是否尝试过按Id、值分组?