T-SQL Group By;包含或IfAny

时间:2011-10-17 06:21:07

标签: sql sql-server sql-server-2005 tsql sql-server-2008

SQL2005和/或SQL2008 在T-SQL中,是否存在任何类型的内置聚合,包含Contains或IfAny或其他什么?组中任何一个等于值的东西? 与 Max(xyz)=value 类似,但不限于最大

Select custID, case when Min(ProductGroup)= "A" then 'Have Ordered Group A' else 'Haven't 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 'Haven't Ordered Group G' end hasOrdered
from orders
inner join products on ordPoductId = productID
group by custID

我可以使用 Min(ProductGroup)=“A”如果我关注的值是min / max或者将from-clause更改为('G'时的情况)然后0其他1结束)创建假的最大值。目前我只关注单个值,但如果可能的话,我想要更直观和灵活的东西。 有什么想法吗?

1 个答案:

答案 0 :(得分:11)

最后的例子与我通常做的很接近。类似的东西:

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

显然会针对每一行评估内部CASE表达式,而外部CASE表达式确定内部表达式是否成功。