Я бы не стал использовать LEFT JOIN
для этого. Я бы просто использовал предложение HAVING
. Предполагая, что веса никогда не бывают отрицательными:
SELECT S.SHIPMENT_ID, S.STATE, S.CONTRACT,
SUM(H.MANUAL_GROSS_WEIGHT) as MANUAL_GROSS_WEIGHT
FROM SHIPMENT S JOIN
HANDLING_UNIT_SHIPMENT H
ON H.SHIPMENT_ID = S.SHIPMENT_ID
WHERE S.STATE = 'Preliminary' AND S.CONTRACT = 'BVL10'
GROUP BY S.SHIPMENT_ID, S.STATE, S.CONTRACT
HAVING MIN(H.MANUAL_GROSS_WEIGHT) > 0;
Если вес может быть 0
, а у вас отрицательные значения, тогда:
HAVING SUM(CASE WHEN H.MANUAL_GROSS_WEIGHT = 0 THEN 1 ELSE 0 END) = 0
Обратите внимание, что SELECT DISTINCT
почти никогда не используетсяс GROUP BY
. В этом запросе он не нужен.
РЕДАКТИРОВАТЬ:
Если вы хотите отфильтровать любой груз, который имеет NULL
вес:
HAVING COUNT(H.MANUAL_GROSS_WEIGHT) = COUNT(*)
Это требуетчтобы все были не NULL
.