T-SQL Group By; Содержит или IfAny - PullRequest
       17

T-SQL Group By; Содержит или IfAny

4 голосов
/ 17 октября 2011

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 еще 1 конец) чтобы создать фальшивый максимум. В настоящее время меня интересует только одно значение, но я бы хотел что-то более интуитивное и гибкое, если это возможно. Есть идеи?

1 Ответ

11 голосов
/ 17 октября 2011

Ваши примеры в конце близки к тому, что я обычно делаю.Что-то вроде:

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

Где внутреннее выражение CASE, очевидно, будет оцениваться по каждой строке, тогда как внешнее выражение CASE определяет, было ли когда-либо внутреннее выражение выполнено успешно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...