【问题标题】:T-SQL Group By; Contains or IfAnyT-SQL 分组依据;包含或 IfAny
【发布时间】:2011-10-17 06:21:06
【问题描述】:

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" 或将 from 子句更改为 ('G' 时的情况然后 0 else 1 end) 创建一个假的最大值。目前我只关心一个值,但如果可能的话,我想要更直观和灵活的东西。 有什么想法吗?

【问题讨论】:

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


【解决方案1】:

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

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

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

【讨论】:

  • @wilsjd - 我从不唠叨人们接受 - 如果他们坚持一段时间并参与,他们最终会倾向于解决它。如果他们不留下来,唠叨他们可能是他们离开的另一个原因。而peter 已经有 2 年多没有出现了,所以我怀疑这是否会被接受。
  • @wilsjd - 我最喜欢的例子是this one - 如果grady 出现并改变了他们接受的答案,那么突然之间并列就被破坏了,我讨厌这样。
猜你喜欢
  • 2010-09-05
  • 1970-01-01
  • 2016-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-26
  • 1970-01-01
相关资源
最近更新 更多