Я настроил и добавил комментарии к вашему сценарию. Возможно, это не даст вам желаемого результата напрямую (требуется дополнительная настройка с вашей стороны), но это приведет вас к месту назначения:)
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 value