Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如果一个值为空,如何不返回结果?_Sql_Oracle - Fatal编程技术网

Sql 如果一个值为空,如何不返回结果?

Sql 如果一个值为空,如何不返回结果?,sql,oracle,Sql,Oracle,一批货物有一个顶级重量,但其中有几个搬运装置的重量。如果这些处理单元中有一个没有值,那么我希望货物不会显示在我的查询中 这是我的问题- `SELECT DISTINCT S.SHIPMENT_ID, S.STATE, S.CONTRACT, CASE WHEN H.M

一批货物有一个顶级重量,但其中有几个搬运装置的重量。如果这些处理单元中有一个没有值,那么我希望货物不会显示在我的查询中

这是我的问题-

`SELECT DISTINCT S.SHIPMENT_ID,
                            S.STATE,
                            S.CONTRACT,
                            CASE
                                WHEN H.MANUAL_GROSS_WEIGHT <> '0' THEN
                                 SUM(H.MANUAL_GROSS_WEIGHT)
                                ELSE
                                 NULL
                            END 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'
         AND H.MANUAL_GROSS_WEIGHT <> '0'
GROUP  BY S.SHIPMENT_ID,
                S.STATE,
                S.CONTRACT,
                H.MANUAL_GROSS_WEIGHT`
`选择不同的S.Shipping\u ID,
美国州立大学,
美国合同,
案例
当H.MANUAL\u毛重为“0”时,则
总和(H.手动总重量)
其他的
无效的
端部手动总重量
从装运到
加入处理单元装运H
在H.Shipping\u ID=S.Shipping\u ID时
其中S.STATE=‘初步’
和S.CONTRACT='BVL10'
和H.手动_毛重“0”
按S.Shipping_ID分组,
美国州立大学,
美国合同,
H.手动总重量`
这将返回123,因为当前有两个盒子,一个手动重量为123,另一个为0


由于其中一个手动重量为0,因此不应退回此装运

如果您将
连接
更改为
左连接
,并在
连接
条件中包含
H.手动(毛重)
,然后通过比较
装运
搬运(单元)装运
中的行数,您可以看到哪些装运没有零重量(由于计数相同):

选择不同的S.Shipping\u ID,
美国州立大学,
美国合同,
总和(H.手动总重量)手动总重量
从装运到
加入处理单元装运H
H.Shipping_ID=S.Shipping_ID和H.MANUAL_毛重“0”
其中S.STATE=‘初步’
和S.CONTRACT='BVL10'
按S.Shipping_ID分组,
美国州立大学,
美国合同
拥有数量(S.Shipping_ID)=数量(H.Shipping_ID)
注意:这允许您删除
案例
表达式,因为它只返回所有
手动毛重
值为非零的装运。

选择不同的S.Shipping\u ID,
SELECT DISTINCT S.SHIPMENT_ID,
                            S.STATE,
                            S.CONTRACT,
                            SUM(H.MANUAL_GROSS_WEIGHT) MANUAL_GROSS_WEIGHT
FROM   SHIPMENT S
JOIN   HANDLING_UNIT_SHIPMENT H
ON     H.SHIPMENT_ID = S.SHIPMENT_ID
         AND H.MANUAL_GROSS_WEIGHT <> NULL
WHERE  S.STATE = 'Preliminary'
         AND S.CONTRACT = 'BVL10'
 GROUP  BY S.SHIPMENT_ID,
                S.STATE,
                S.CONTRACT
HAVING COUNT(S.SHIPMENT_ID) = COUNT(H.SHIPMENT_ID)
美国州立大学, 美国合同, 总和(H.手动总重量)手动总重量 从装运到 加入处理单元装运H 在H.Shipping\u ID=S.Shipping\u ID时 和H.手动总重量为零 其中S.STATE=‘初步’ 和S.CONTRACT='BVL10' 按S.Shipping_ID分组, 美国州立大学, 美国合同 拥有数量(S.Shipping_ID)=数量(H.Shipping_ID)
我不会为此使用
左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
请注意,
selectdistinct
几乎从未与
groupby
一起使用。在此查询中,不需要它

编辑:

如果要筛选出任何重量为
NULL
的装运:

HAVING COUNT(H.MANUAL_GROSS_WEIGHT) = COUNT(*)

这要求所有数据都必须是非空的

提供程序示例数据和表格式的预期输出Use HAVING子句!@jarlh您能告诉我这是哪一种SQL吗?@Nick It is Oracle我的意思是,如果任何手动毛重为空,那么在这种情况下,其中一个是空的,则不应作为此装运返回任何行未完成基本上是因为某些行没有填写权重。你明白吗?@mfgn此查询将执行此操作。如果装运在处理单元装运中有任何0或空值。手动毛重,则
左连接
将返回该行的所有
值。然后,当我们进行
计数
S.shipping\u ID
的unt将高于
H.shipping\u ID
(因为该值为
NULL
)因此装运将不会显示。@mfgn我认为您的编辑不正确。没有任何值会通过
NULL
测试。请参阅@mfgn,但如果值为
NULL
,它将无法通过
0
测试,就像
0
值一样。如果值经常为NULL会怎样?在这种情况下,如果有一个权重为NULL,我不希望看到该值要显示的装运。它从不为零,或者为空,或者每行都有一个值,如果有一行为空,那么我希望它不显示装运,因为基本上数据不完整。您可以将
和H.MANUAL_毛重不为空添加到
WHERE
子句中。这将过滤掉所有值均为的装运e> 空
。没有。因此,如果装运下有两个重量。一个是空的,一个有值,那么我不希望该装运返回,因为您提到的装运仍将返回存在的重量,忽略重量为空的事实。@mfgn…您不接受此答案有什么原因吗?
HAVING COUNT(H.MANUAL_GROSS_WEIGHT) = COUNT(*)