У меня есть список деталей от поставщика, и я хочу посмотреть, что мы купили и продали с 1 января. Я создал подзапросы для информации о продажах и покупке.Как исключить строки, когда все коррелированные подзапросы возвращаются Нуль
Есть четыре варианта в результатах:
- Sales Количество = Покупка Количество
- Sales Количество> Покупка Количество (включая NULL Purchase количество)
- Sales Количество < Покупка Количество (включая NULL Sales Количество)
- Оба объема продаж и приобретения являются NULL
Как исключить строки, когда количество продаж и покупки равно NULL, при сохранении этих строк, которые могут иметь NULL Sales Quantity или Purchase Quantity? Для иллюстрации примеров этих сценариев прилагается изображение.
Я рассмотрел this поток, но он, похоже, не применяется, потому что мои столбцы не обязательно должны быть равными.
SELECT DISTINCT
p21_view_supplier.supplier_id AS [Supp ID],
p21_view_supplier.supplier_name AS Supplier,
p21_view_inv_mast.item_id AS [Item ID],
p21_view_inv_mast.item_desc AS [Item Desc],
p21_view_inv_loc.location_id AS [Location ID],
invoice_data.[Total Shipped by Sales Loc],
purchase_data.[PO Qty Ordered]
FROM
p21_view_supplier
INNER JOIN p21_view_inventory_supplier ON p21_view_supplier.supplier_id = p21_view_inventory_supplier.supplier_id
INNER JOIN p21_view_inv_mast ON p21_view_inventory_supplier.inv_mast_uid = p21_view_inv_mast.inv_mast_uid
INNER JOIN p21_view_inv_loc ON p21_view_inv_mast.inv_mast_uid = p21_view_inv_loc.inv_mast_uid
--Invoices
LEFT JOIN (
SELECT
p21_view_invoice_hdr.sales_location_id,
p21_view_invoice_line.item_id,
p21_view_invoice_line.supplier_id,
p21_view_invoice_line.inv_mast_uid,
SUM(p21_view_invoice_line.qty_shipped) AS [Total Shipped by Sales Loc]
FROM
p21_view_invoice_hdr
INNER JOIN p21_view_invoice_line ON p21_view_invoice_hdr.invoice_no = p21_view_invoice_line.invoice_no
WHERE
(p21_view_invoice_hdr.invoice_date >= CONVERT(DATETIME, '2016-01-01 00:00:00', 102))
GROUP BY
p21_view_invoice_hdr.sales_location_id,
p21_view_invoice_line.item_id,
p21_view_invoice_line.supplier_id,
p21_view_invoice_line.inv_mast_uid
) invoice_data ON p21_view_supplier.supplier_id = invoice_data.supplier_id
AND p21_view_inv_mast.inv_mast_uid = invoice_data.inv_mast_uid
AND p21_view_inv_loc.location_id = invoice_data.sales_location_id
--Purchasing
LEFT JOIN (
SELECT
p21_view_po_hdr.supplier_id,
p21_view_po_hdr.location_id AS [PO Loc ID],
SUM(p21_view_po_line.qty_ordered) AS [PO Qty Ordered],
p21_view_po_line.item_id AS [Item ID],
p21_view_po_line.inv_mast_uid
FROM
p21_view_po_hdr
INNER JOIN p21_view_po_line ON p21_view_po_hdr.po_no = p21_view_po_line.po_no
WHERE
(p21_view_po_hdr.date_created >= CONVERT(DATETIME, '2016-01-01 00:00:00', 102))
AND (p21_view_po_hdr.delete_flag IS NULL OR
p21_view_po_hdr.delete_flag = 'N')
AND (p21_view_po_line.delete_flag IS NULL OR
p21_view_po_line.delete_flag = 'N')
AND (p21_view_po_line.cancel_flag IS NULL OR
p21_view_po_line.cancel_flag = 'N')
AND (p21_view_po_hdr.cancel_flag IS NULL OR
p21_view_po_hdr.cancel_flag = 'N')
GROUP BY
p21_view_po_hdr.supplier_id,
p21_view_po_hdr.location_id,
p21_view_po_line.item_id,
p21_view_po_line.inv_mast_uid
) purchase_data ON p21_view_supplier.supplier_id = purchase_data.supplier_id
AND p21_view_inv_mast.inv_mast_uid = purchase_data.inv_mast_uid
AND p21_view_inv_loc.location_id = purchase_data.[PO Loc ID]
WHERE
(p21_view_supplier.supplier_id = 8761)
AND (p21_view_inv_mast.delete_flag = 'N')
ORDER BY
p21_view_inv_mast.item_id,
p21_view_inv_loc.location_id
предполагая, что я понял вопрос и предполагая supplier_id не обнуляемые колонки, почему бы не просто добавить в вашем внешний, где пункт 'и NOT (purchase_data.supplier_id является недействительным и invoice_data.supplier_id равно нуль)'? –
@ ZoharPeled, спасибо, что решил! Я должен был подумать об этом ... – dmatthew
Рад помочь! Я позже напишу свой комментарий к ответу, чтобы вы могли его ускорить и сообщить людям, что проблема решена. –