Я пишу запрос, чтобы показать позиции заказа на продажу, которые не попали в общий заказ. Мой базовый запрос показывает условия, которые я ищу, но я считаю, что мне нужно сделать этот подзапрос, чтобы получить, где я должен быть. Я хочу показать все результаты, в которых данный Itemid имеет тип заказа 'R', но не имеет также тип заказа 'S', а также имеет QTYORDERED> '0' для каждой записи в таблице. Ниже приведен запрос и результат для одного указанного c порядка, в котором показано исключение, о котором я хочу сообщить.
Вот мой базовый запрос:
SELECT h.ORDERTYPE
,d.itemid
,d.ordernumber
,d.HOST_ORIG_QTYORDERED
,d.QTYORDERED
,d.QTYSHIPPED
,d.QTYLOADED
,d.qtypicked
,d.BLANKET_QTY_RELEASED
,d.BLANKET_QTY_RELEASED_SHIPPED
FROM asctrac.dbo.ordrhdr h
INNER JOIN asctrac.dbo.ordrdet d
ON d.ORDERNUMBER = h.ORDERNUMBER
WHERE h.CUSTPONUM = '69nsk13e'
ORDER BY h.ORDERTYPE
Пример данных:
+-----------+----------+-----------------+----------------------+------------+------------+-----------+-----------+----------------------+------------------------------+
| ORDERTYPE | itemid | ordernumber | HOST_ORIG_QTYORDERED | QTYORDERED | QTYSHIPPED | QTYLOADED | qtypicked | BLANKET_QTY_RELEASED | BLANKET_QTY_RELEASED_SHIPPED |
+-----------+----------+-----------------+----------------------+------------+------------+-----------+-----------+----------------------+------------------------------+
| R | 0645182 | OR2219555.2 | 4.0000000 | 4.0000 | 0.0000 | 0.0000 | 0.0000 | 4.0000000 | 4.0000000 |
| R | 999992PK | OR2219555.2 | 140.0000000 | 140.0000 | 0.0000 | 0.0000 | 0.0000 | 140.0000000 | 140.0000000 |
| R | 0672411 | OR2219555.2 | 1.0000000 | 1.0000 | 0.0000 | 0.0000 | 0.0000 | 1.0000000 | 1.0000000 |
| R | 1180286 | OR2219555.2 | 1.0000000 | 1.0000 | 0.0000 | 0.0000 | 0.0000 | 1.0000000 | 1.0000000 |
| R | 0030658 | OR2219555.2 | 1.0000000 | 1.0000 | 0.0000 | 0.0000 | 0.0000 | 1.0000000 | 1.0000000 |
| R | 0030657 | OR2219555.2 | 1.0000000 | 1.0000 | 0.0000 | 0.0000 | 0.0000 | 1.0000000 | NULL |
| R | 0614536 | OR2219555.2 | 1.0000000 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | NULL | NULL |
| S | 0645182 | OR2219555.2-001 | 4.0000000 | 4.0000 | 4.0000 | 4.0000 | 4.0000 | NULL | NULL |
| S | 999992PK | OR2219555.2-001 | 140.0000000 | 140.0000 | 140.0000 | 140.0000 | 140.0000 | NULL | NULL |
| S | 0672411 | OR2219555.2-001 | 1.0000000 | 1.0000 | 1.0000 | 1.0000 | 1.0000 | NULL | NULL |
| S | 1180286 | OR2219555.2-001 | 1.0000000 | 1.0000 | 1.0000 | 1.0000 | 1.0000 | NULL | NULL |
| S | 0030658 | OR2219555.2-002 | 1.0000000 | 1.0000 | 1.0000 | 0.0000 | 1.0000 | NULL | NULL |
+-----------+----------+-----------------+----------------------+------------+------------+-----------+-----------+----------------------+------------------------------+
Желаемый результат для этого примера:
+-----------+---------+-------------+----------------------+------------+------------+-----------+-----------+----------------------+------------------------------+
| ORDERTYPE | itemid | ordernumber | HOST_ORIG_QTYORDERED | QTYORDERED | QTYSHIPPED | QTYLOADED | qtypicked | BLANKET_QTY_RELEASED | BLANKET_QTY_RELEASED_SHIPPED |
+-----------+---------+-------------+----------------------+------------+------------+-----------+-----------+----------------------+------------------------------+
| R | 0030657 | OR2219555.2 | 1.0000000 | 1.0000 | 0.0000 | 0.0000 | 0.0000 | 1.0000000 | NULL |
+-----------+---------+-------------+----------------------+------------+------------+-----------+-----------+----------------------+------------------------------+
I believe I figured out a reasonable way to do get the desired result:
SELECT h.ORDERTYPE
,h.CUSTPONUM
,d.itemid
,d.ordernumber
,d.HOST_ORIG_QTYORDERED
,d.QTYORDERED
,d.QTYSHIPPED
,d.QTYLOADED
,d.qtypicked
,d.BLANKET_QTY_RELEASED
,d.BLANKET_QTY_RELEASED_SHIPPED
FROM asctrac.dbo.ordrhdr h with (nolock)
INNER JOIN asctrac.dbo.ordrdet d
ON d.ORDERNUMBER = h.ORDERNUMBER
WHERE exists (select distinct CUSTPONUM
from asctrac.dbo.ordrhdr ssh with (nolock)
Where ssh.ORDERTYPE = 'S'
and ssh.custponum = h.CUSTPONUM)
and h.ORDERTYPE = 'R'
and d.QTYORDERED > '0'
and not exists (SELECT 1
FROM asctrac.dbo.ordrhdr sh with (nolock)
INNER JOIN asctrac.dbo.ordrdet sd
ON sd.ORDERNUMBER = sh.ORDERNUMBER
WHERE sh.ORDERTYPE = 'S'
and sh.CUSTPONUM = h.CUSTPONUM
and sd.itemid = d.ITEMID)