根据不同的计数设置值

Dio*_*tos 1 sql sql-server

假设我有以下数据tbl

Label | Color
X     | color1
X     | color1
Y     | color1
Y     | color2
Run Code Online (Sandbox Code Playgroud)

样本输出应该是:

X | color1
Y | misc
Run Code Online (Sandbox Code Playgroud)

所以基本上,如果相应的标签只有一种颜色,我希望它是那种类型,否则我希望它说misc.

我做了以下没有按我想要的工作,下一步是将 a 应用casecount

select label,count(distinct color) from @tbl
group by label,color
Run Code Online (Sandbox Code Playgroud)

Mar*_*ith 6

您可以使用MAXMIN获取要在适当情况下使用的单个值。

并且应该只是分组 label

select label,
       case when count(distinct color) = 1 THEN MAX(color) ELSE 'misc' END
from @tbl
group by label
Run Code Online (Sandbox Code Playgroud)

尽管检查 max 是否等于 min 而不是进行不同的计数通常会更有效

select label,
       case when MAX(color) = MIN(color) THEN MAX(color) ELSE 'misc' END
from @tbl
group by label
Run Code Online (Sandbox Code Playgroud)

如果你有一个索引,在效率上没有太多选择,label, color但如果你只有一个索引(label) INCLUDE (color)或根本没有有用的索引,MAX/MIN方法将不得不做更少的工作(只需要一个单一的分组操作label并跟踪每个组中的两个值 - 不识别每个组中唯一值的数量)