ИМЕЕТе подсчет предложений с условиями?

Допустим, у меня есть таблица с хранящимися в ней заказами. У этих заказов есть столбец OrderType, указывающий, что это за заказ.

У этих заказов также есть столбец, в котором указано, какие заказы следует сгруппировать (OrderGroup).

Теперь мне нужно найти OrderGroups, у которых есть два OrderTypes из 3845 И один OrderType из 5188.

Я построил свой обычный запрос с помощью GROUP BY следующим образом:

SELECT  OrderGroup
FROM    dbo.Order orders
GROUP BY orders.OrderGroup
ORDER BY orders.OrderGroup

Но теперь, когда мне нужно добавить критерии для строк OrderType, я в тупике. Это логика, которую я ищу (не настоящий SQL):

SELECT  OrderGroup
FROM    dbo.Order orders
GROUP BY orders.OrderGroup
HAVING (COUNT(orders.OrderType) = 2 WHEN orders.OrderType = 3845)
       AND (COUNT(orders.OrderType) = 1 WHEN orders.OrderType = 5188)
ORDER BY orders.OrderGroup

Есть ли способ сделать что-то подобное в SQL Server 2019?

HAVING COUNT( CASE WHEN OrderType = 3845 THEN 1 END ) = 2 AND COUNT( CASE WHEN OrderType = 5188 THEN 1 END ) = 1
Dai 21.06.2024 22:44

Найдите «условное агрегирование».

Thom A 21.06.2024 22:49

Вы могли бы это сделать where OrderType in (3845, 5188) group by OrderGroup having sum(OrderType) = 12878 Ну, я думаю, это, вероятно, вызвало бы неодобрение...

shawnt00 21.06.2024 23:28
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
3
105
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно создать выражения count для условного подсчета соответствующих заказов, а затем сравнить их с ожидаемыми значениями:

SELECT   OrderGroup
FROM     dbo.Order orders
GROUP BY orders.OrderGroup
HAVING   COUNT(CASE orders.OrderType WHEN 3845 THEN 1 END) = 2 AND
         COUNT(CASE orders.OrderType WHEN 5188 THEN 1 END) = 1
ORDER BY orders.OrderGroup

Другие вопросы по теме