Я пытаюсь найти элементы, которые показывались один раз или менее в отчете. Я знаю, что, чтобы узнать, сколько раз каждый элемент был включен, я использую это.SQL Count in Where where
select COUNT(VP.VendorPartID)
from Purchasing.PurchaseOrder PO with (nolock)
inner join dbo.tblVendor V with (nolock)
on PO.VendorID=V.VendorID
inner join Purchasing.PurchaseOrderItem POI with (nolock)
on PO.PurchaseOrderID=POI.PurchaseOrderID
inner join Purchasing.VendorPart VP with (nolock)
on POI.VendorPartID=VP.VendorPartID
where V.ProductTypeID=4
group by PO.PurchaseOrderID
Но я попытался гнезда его внутри другого запроса, чтобы иметь возможность установить, что он должен появиться 1 раз или меньше, и он говорит, что это ошибка, потому что
«Subquery вернулся более чем на 1 значение . Это недопустимо, если подзапрос следует за =,! =, <, < =,>,> = или когда подзапрос используется как выражение. "
Я сделал это, и я предполагаю, что это довольно неправильно, ха-ха.
select VP.VendorPartID,VP.VendorPartDescription
from Purchasing.PurchaseOrder PO with (nolock)
inner join dbo.tblVendor V with (nolock)
on PO.VendorID=V.VendorID
inner join Purchasing.PurchaseOrderItem POI with (nolock)
on PO.PurchaseOrderID=POI.PurchaseOrderID
inner join Purchasing.VendorPart VP with (nolock)
on POI.VendorPartID=VP.VendorPartID
where (
select COUNT(VP.VendorPartID)
from Purchasing.PurchaseOrder PO with (nolock)
inner join dbo.tblVendor V with (nolock)
on PO.VendorID=V.VendorID
inner join Purchasing.PurchaseOrderItem POI with (nolock)
on PO.PurchaseOrderID=POI.PurchaseOrderID
inner join Purchasing.VendorPart VP with (nolock)
on POI.VendorPartID=VP.VendorPartID
where V.ProductTypeID=4
group by PO.PurchaseOrderID
) < 2
group by VP.VendorPartID,VP.VendorPartDescription
Желаемые результаты будут
VendorPartID VendorPartDescription
001 name 1
002 name 2
003 name 3
Это покажет только те, которые появились 1 раз по заказам на покупку.
Почему вы группировки по PurchaseOrderID? Вам нужен общий счетчик или вы хотите подсчитать количество на PurchaseOrderID? Если подзапрос возвращает строку на PurchaseOrderID, вы не можете сравнить набор с числом. Можете ли вы показать некоторые примеры данных и желаемые результаты? Я просмотрел ваш запрос несколько раз, и я не могу его перестроить. Предполагается ли, что фильтр типа находится в подзапросе? Зачем? –
Попробуйте изучить предложение HAVING ... – logixologist
@AaronBertrand - Я хочу, чтобы элементы подсчитывали время, которое они появляются в заказе на покупку, чтобы я мог видеть, какие из них появились только один раз или меньше. – ash