2

行が見つからない場合でも、単一のクエリから結果を取得して数量の合計を表示しようとしています。

このクエリは、まさに私が望むことを行います:

select max(m.item_number), max(m.item_description), 
       max(m.uom), sum(nvl(i.qty_ordered,0))
from (((dex.ITEM_MASTER m FULL JOIN dex.order_request_items i ON m.item_number = i.item_number)  
                          FULL JOIN dex.order_request h ON h.orderid = i.orderid)
                          FULL JOIN dex.customer c ON h.customer_number = c.customer_number)
where m.item_number in ('199', '198', '11415', '11425', '11435', '1145', '766')
group by m.item_number
order by 1

これを返します

MAX(M.ITEM_NUMBER) MAX(M.ITEM_DESCRIPTION)     MAX(M.UOM) "SUM(NVL(I.QTY_ORDERED,0))"
11415              Bananas HALF CASE GREEN     1/2        0
11425              Bananas HALF CASE GREEN TIP 1/2        0
11435              Bananas HALF CASE RIPE      1/2        0
1145               Bananas HALF CASE           1/2        5
198                Watermelons SEEDLESS        EACH       0
199                Watermelons                 EACH       80
766                Pumpkins EACH               EACH       0

これにより、数量のない行のゼロが表示されます。データを絞り込むために必要な条件を追加すると、問題が発生します。このクエリの追加条件で同じ種類の結果が必要です

select max(m.item_number), max(m.item_description), 
       max(m.uom), sum(nvl(i.qty_ordered,0))
from (((dex.ITEM_MASTER m FULL JOIN dex.order_request_items i ON m.item_number = i.item_number)  
                          FULL JOIN dex.order_request h ON h.orderid = i.orderid)
                          FULL JOIN dex.customer c ON h.customer_number = c.customer_number)                      
where m.item_number in ('199', '198', '11415', '11425', '11435', '1145', '766')
and     h.REQUEST_DELIVERY_DATE = TO_DATE('10/24/2012', 'MM/DD/YYYY')
and     c.subcontractorid is null
and     h.request_state <> 'Incomplete'
group by m.item_number
order by 1

ただし、そのクエリはこの結果を返します。

MAX(M.ITEM_NUMBER) MAX(M.ITEM_DESCRIPTION)     MAX(M.UOM) "SUM(NVL(I.QTY_ORDERED,0))"
199                Watermelons                 EACH       31

ゼロを表示するはずの行がなくなりました。追加の条件を使用すると、最初の結果のようなすべての行を表示することは可能ですか?

ありがとう!

4

1 に答える 1

1

試す

select max(m.item_number), max(m.item_description), 
       max(m.uom), sum(nvl(i.qty_ordered,0))
from (((dex.ITEM_MASTER m FULL JOIN dex.order_request_items i ON m.item_number = i.item_number)  
                          FULL JOIN dex.order_request h ON h.orderid = i.orderid)
                          FULL JOIN dex.customer c ON h.customer_number = c.customer_number)                      
where m.item_number in ('199', '198', '11415', '11425', '11435', '1145', '766')
and     h.REQUEST_DELIVERY_DATE = TO_DATE('10/24/2012', 'MM/DD/YYYY')
and     c.subcontractorid is null
and     nvl(h.request_state,'Complete') <> 'Incomplete'
group by m.item_number
order by 1

h.request_stateに新しい条件を追加するときは、NULLデータの可能性を考慮する必要があります。NVLを追加すると役立つ場合があります。

hth

于 2012-11-01T19:59:09.730 に答える