我向case when语句添加了一个sum语句,它触发了一个ORA-00937:不是一个单组组函数错误。
SELECT DISTINCT abc_value,
COUNT (*) AS num_abc_values
from (
select dsp_sku,
sum(case
when EXPTD_QTY <> ACTL_INVN_QTY then (EXPTD_QTY-ACTL_INVN_QTY)*(-1)
else null
end) as "Variance_"
,decode (cc.stat_code, '0', 'Unprocessed', '90', 'Processed', '99', 'Expired') as Status,
trunc(cc.create_date_time) CC_date,
case
when dsp_sku = 'EGIA60AMT' then 'A'
when dsp_sku = 'LF1937' then 'A'
when dsp_sku = '980X3ENDIUU' then 'A'
when dsp_sku = '186-0106' then 'A'
when dsp_sku = 'PM35MN02' then 'A'
when dsp_sku = 'SIGC60MT' then 'B'
when dsp_sku = 'GS833' then 'B'
when dsp_sku = '5.5 PED' then 'B'
when dsp_sku = 'L74' then 'B'
when dsp_sku = 'VLOCL2105' then 'B'
when dsp_sku = 'VLOCM0134' then 'C'
when dsp_sku = '8886471021V' then 'C'
when dsp_sku = 'SILSCLINCH46' then 'C'
when dsp_sku = 'YCN1800P' then 'D'
when dsp_sku = 'YCN1801P' then 'D'
when dsp_sku = 'Y-REFACH-X-E' then 'D'
when dsp_sku = 'ZL7777-0091' then 'D'
else 'Empty Location'
end as ABC_Value
from WH_GHC1.CYCLE_COUNT_HIST cc
left join item_master im on
im.sku_id = cc.sku_id
inner join locn_hdr lh on
lh.locn_id = cc.locn_id
where
cc.whse = 'PH3'
--and cc.stat_code in ('0','90') --stat_code: 0 is unprocessed, 90 is processed, 99 is expired
and cc.stat_code = 90
--and cc.stat_code = 0
--and cc.create_date_time between '&FromDate' and '&EndDate'
and cc.create_date_time between '&FromDate' and '&ToDate'
--and dsp_sku = '&SKU'
--and not im.srl_nbr_reqd = 4
--and EXPTD_QTY = 0
--and actl_invn_qty = 0
)
GROUP BY ABC_Value, Dsp_sku
--having count (Variance_) <>0;我尝试重新编写我的group by,添加到group by,摆脱它,但都没有成功……
我现在让它计算ABC的值。我想让它对ABC的方差进行求和。我相信sum语句是正确的,但触发ORA错误...有什么建议吗?
发布于 2019-05-23 13:14:32
我已经对您的脚本进行了调整并添加了注释。这可能不会直接给你想要的输出(你的部分需要更多的调整),但这会引导你走向你的目的地:)
SELECT
abc_value, --No DISTINCT required
COUNT (*) AS num_abc_values,
SUM(Variance_) AS Variance_
FROM
(
SELECT
--dsp_sku,
--SUM
--(
CASE
WHEN EXPTD_QTY <> ACTL_INVN_QTY THEN (EXPTD_QTY-ACTL_INVN_QTY)*(-1)
ELSE NULL
END AS 'Variance_',
--decode (cc.stat_code, '0', 'Unprocessed', '90', 'Processed', '99', 'Expired') as Status,
--trunc(cc.create_date_time) CC_date,
-- All above columns: dsp_sku, Variance_, Status, CC_date has no impace on the Final output
--So you can exclude them from the selection
CASE
WHEN dsp_sku IN('EGIA60AMT','LF1937','980X3ENDIUU','186-0106','PM35MN02') THEN 'A'
WHEN dsp_sku IN ('SIGC60MT','GS833','5.5 PED','L74','VLOCL2105') THEN 'B'
WHEN dsp_sku IN ('VLOCM0134','8886471021V','SILSCLINCH46') THEN 'C'
WHEN dsp_sku IN ('YCN1800P','YCN1801P','Y-REFACH-X-E','ZL7777-0091') then 'D'
ELSE 'Empty Location'
END AS ABC_Value
-- You can use IN operator instead of checking all values one by one.
FROM WH_GHC1.CYCLE_COUNT_HIST cc
LEFT JOIN item_master im
ON im.sku_id = cc.sku_id
INNER JOIN locn_hdr lh
ON lh.locn_id = cc.locn_id
WHERE
cc.whse = 'PH3'
AND cc.stat_code = 90
AND cc.create_date_time BETWEEN '&FromDate' AND '&ToDate'
)
GROUP BY ABC_Value
--, Dsp_sku
-- This group by is unnecessary as ABC_Value already created from this column's valuehttps://stackoverflow.com/questions/56267431
复制相似问题