2017-04-16 40 views
0

我已经写了一个过程,并且有多个我已经使用的Sql语句,但是在一个语句中,我被卡住了,所以我的问题出现在下面的查询中。在我的查询中有一个名为ULE.ULE_ORIGINAL_PFS的引用句柄,此引用句柄的值可以是数字或MASTER_DATA_NO_AVAILABLE或INVALID_ENTRY,所以我的要求是每当refnum的值是MASTER_DATA_NO_AVAILABLE或INVALID_ENTRY时,我必须将其视为' 0'非常好,因为我很困惑使用DECODE或NVL,所以非常有帮助。想在我的查询中使用DECODE

SELECT SUM(ORF.ORDER_RELEASE_REFNUM_VALUE) 
INTO V_OR_ORIGINAL_PFS 
FROM ORDER_RELEASE_REFNUM ORF , 
VIEW_SHIPMENT_ORDER_RELEASE VSOR, 
SHIPMENT SH , 
ORDER_RELEASE ORR 
WHERE ORF.ORDER_RELEASE_GID   = VSOR.ORDER_RELEASE_GID 
AND VSOR.SHIPMENT_GID     = SH.SHIPMENT_GID 
AND ORR.ORDER_RELEASE_GID    = ORF.ORDER_RELEASE_GID 
AND ORF.ORDER_RELEASE_REFNUM_QUAL_GID = 'ULE.ULE_ORIGINAL_PFS' 
AND SH.SHIPMENT_GID  = P_SHIPMENT_GID 
AND ORR.ORDER_RELEASE_GID IN 
(SELECT ORR.ORDER_RELEASE_GID 
FROM VIEW_SHIPMENT_ORDER_RELEASE VSOR, 
SHIPMENT SH , 
ORDER_RELEASE ORR 
WHERE VSOR.ORDER_RELEASE_GID = ORR.ORDER_RELEASE_GID 
AND VSOR.SHIPMENT_GID  = SH.SHIPMENT_GID 
AND SH.SHIPMENT_GID   = P_SHIPMENT_GID 
AND ORR.ORDER_RELEASE_GID NOT IN 
(SELECT ORF.ORDER_RELEASE_GID 
FROM VIEW_SHIPMENT_ORDER_RELEASE VSOR, 
SHIPMENT SH , 
ORDER_RELEASE_REFNUM ORF 
WHERE VSOR.ORDER_RELEASE_GID   = ORF.ORDER_RELEASE_GID 
AND VSOR.SHIPMENT_GID     = SH.SHIPMENT_GID 
AND ORF.ORDER_RELEASE_REFNUM_QUAL_GID = 'ULE.ULE_UNPLANNED_ICT' 
AND SH.SHIPMENT_GID     = P_SHIPMENT_GID 
) 
); 
+0

你在找什么东西像这样解码(ULE_ORIGINAL_PFS,'MASTER_DATA_NO_AVAILABLE',0,'INVALID_ENTRY',0,ULE_ORIGINAL_PFS)'?虽然实际上无法理解您的查询逻辑.... – Plirkee

回答

0

“有我的查询引用句柄命名为ULE.ULE_ORIGINAL_PFS”

您的查询是没有意义的,但也许这只是你编辑它来发布方式这里。

“我很困惑为使用解码或NVL”

也许既不使用,而是选择CASE(),而这是一个行业标准:

AND ORF.ORDER_RELEASE_REFNUM_QUAL_GID = 
        case ULE.ULE_ORIGINAL_PFS 
         when 'MASTER_DATA_NO_AVAILABLE' then 0 
         when 'INVALID_ENTRY' then 0 
         else ULE.ULE_ORIGINAL_PFS 
        end