T-SQL 分组依据;包含或如果有

问题描述 投票:0回答:1

SQL2005 和/或 SQL2008 T-SQL 中是否有任何类型的内置聚合用于 Contains 或 IfAny 或其他什么?组中的任何一个都等于一个值的东西? 与

Max(xyz)=value
类似,但不限于 max。

Select custID, case when Min(ProductGroup)= "A" then 'Have Ordered Group A' else 'Have not Ordered Group A' end hasOrdered
from orders
inner join products on ordPoductId = productID
group by custID

这适用于单值比较,如果它是最小值/最大值,但我想要类似的东西:

Select custID, case when contains(ProductGroup, "G") then 'Have Ordered Group G' else 'Have not Ordered Group G' end hasOrdered
from orders
inner join products on ordPoductId = productID
group by custID

如果我关心的值是最小值/最大值,我可以使用 Min(ProductGroup)="A" 或将 from 子句更改为 (case when 'G' then 0 else 1 end) 来创建一个假的最大值。目前我只关心单个值,但如果可能的话我想要更直观和灵活的东西。 有什么想法吗?

sql sql-server sql-server-2005 t-sql sql-server-2008
1个回答
21
投票

最后你的例子与我通常做的很接近。比如:

CASE MAX(CASE WHEN ProductGroup = 'G' THEN 1 ELSE 0 END)
   WHEN 1 THEN 'Have Ordered'
   ELSE 'Haven''t ordered'
END

内部

CASE
表达式显然将针对每一行进行计算,而外部
CASE
表达式确定内部表达式是否成功。

© www.soinside.com 2019 - 2024. All rights reserved.