Счет в Query 400 не проходит правильно
У меня есть таблица, в которой есть данные заказа, например: Таблица Order_Detail и Item_Master объединяются с помощью Item# Мы хотим сообщить номер заказа, таблица Order_Detail:
Order# Item#
1234 IPhone6
1234 IPhone5
1234 Battery
join Item_Master:
Item# Item_type Desc
IPhone6 Phone Smartphone
IPhone5 Phone Smartphone
Теперь нам нужны только номера заказов, у которых есть только один Item-Type = Phone. Нас интересуют только типы телефонов. Я попытался использовать Query/400 и выполнить подсчет по порядку #, который = Телефон, а затем взять только количество = 1. Но это приводит к некоторым заказам, которые имеют более одного типа телефона = Телефон, в нашем примере здесь мы не будем хочу этот заказ.
3 ответа
Этот запрос будет возвращать номера заказов, где единственным типом заказанного элемента является "телефон"
select ordernum
from order_detail od
join item_master im on im.itemnum = od.itemnum
group by ordernum
having count(case when im.item_type <> 'Phone' then 1 end) = 0
and count(*) = 1
если вы хотите разрешить несколько "телефонных" заказов, вы можете удалить and count(*) = 1
Ваш вопрос немного сбивает с толку. Вы хотите получить количество номеров заказов, где Item_Type = 'Phone'
? Если так, то следующее должно работать для вас:
SELECT COUNT(DISTINCT OrderNum) AS OrderNumCount
FROM Order_Detail o
INNER JOIN Item_Master i ON o.ItemNum = o.ItemNum
WHERE Item_type = 'Phone'
Или вы только после заказов, которые имеют только одну запись из таблицы элементов, связанных. Если так, то вы можете захотеть:
SELECT o.OrderNum
FROM Order_Detail o
INNER JOIN Item_Master i ON o.ItemNum = o.ItemNum
WHERE Item_type = 'Phone'
GROUP BY o.OrderNum
HAVING COUNT(*) = 1
Вы можете попробовать что-то вроде
SELECT o.OrderNum
FROM
Order_Detail o
INNER JOIN
Item_Master m
On o.ItemNum = m.ItemNum
WHERE m.Item_Type = 'Phone'
GROUP BY o.OrderNum
HAVING COUNT(*) = 1