我希望在I.ITEMNUM ='505611'中看到1行中的所有记录而不是2行。列“D.RESTYPE”可以是APSOFT或APHARD。因此具有SUM函数的Case表达式。但是,我的输出显示为2行,因为有1个数量被分类为“APSOFT”,而数量43被归类为“APHARD”。请您的及时回复表示高度赞赏。仅供参考,这是在ORACLE。
SELECT i.itemnum,
CASE WHEN d.restype = 'APSOFT' THEN SUM (NVL (d.reservedqty, 0)) END
AS "ALLOCATED",
CASE WHEN d.restype = 'APHARD' THEN SUM (NVL (d.reservedqty, 0)) END
AS "RESERVE"
FROM mxrads.inventory n
LEFT OUTER JOIN mxrads.item i ON i.itemnum = n.itemnum
LEFT OUTER JOIN mscrads.invreserve d
ON n.itemnum = d.itemnum AND n.location = d.location
WHERE n.siteid <> 'MS'
AND n.location = '&WHSE'
AND n.status = 'ACTIVE'
AND n.itemnum = '505611'
GROUP BY i.itemnum, d.restype
答案 0 :(得分:1)
case
需要在总和内而不是在其外部。完成此操作后,您就可以从d.restype
条款中删除GROUP BY
。
NVL (
SUM (
CASE WHEN d.restype = 'APSOFT' THEN d.reservedqty ELSE NULL END),
0)
AS "ALLOCATED",
NVL (
SUM (
CASE WHEN d.restype = 'APHARD' THEN d.reservedqty ELSE NULL END),
0)
AS "RESERVE",
当您将案例放在外面时,它需要d.reservedqty
的总和,然后根据d.retype
中的值显示它。通过颠倒这一点,我们只是说&#34;仅对d.reservedqty
的{{1}}的值求和,其中d.restype
的对应值是指定值&#34;。