Запрос на отображение исключений SQL заказов на продажу - PullRequest
0 голосов
/ 19 марта 2020

Я пишу запрос, чтобы показать позиции заказа на продажу, которые не попали в общий заказ. Мой базовый запрос показывает условия, которые я ищу, но я считаю, что мне нужно сделать этот подзапрос, чтобы получить, где я должен быть. Я хочу показать все результаты, в которых данный 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

Sample data

Пример данных:

+-----------+----------+-----------------+----------------------+------------+------------+-----------+-----------+----------------------+------------------------------+
| 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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...