我有以下查询以生成特定报告
SELECT DATE,
NVL(SUM(P_A),0) AS P_A,
NVL(SUM(P_B),0) AS P_B,
NVL(SUM(P_C),0) AS P_C,
NVL(SUM(P_D),0) AS P_D
FROM(SELECT DISTINCT
D.ORG,
D.TYPE,
D.ID
D.PART
D.QTY
TO_CHAR(H.ACTUAL_DATE,'YYYYMMDD')
AS SHIP_DATE,
CASE
WHEN D.PART = 'A'
THEN
NVL(D.QTY,0)
END AS P_A,
CASE
WHEN D.PART = 'B'
THEN
NVL(D.QTY,0)
END AS P_B)
CASE
WHEN D.PART = 'C'
THEN
NVL(D.QTY,0)
END AS P_C,
CASE
WHEN D.PART = 'D'
THEN
NVL(D.QTY,0)
END AS P_D
FROM V_DTL D, O_HDR H
WHERE D.ORG='ABC'
AND D.TYPE IN ('XYZ')
AND H.ID = D.ID
AND H.STATUS = 'PQR'
AND H.ACTUAL_DATE =>
TO_DATE ('20171001', 'YYYYMMDD')
AND H.ACTUAL_DATE <
TO_DATE ('20181002', 'YYYYMMDD')
我今天知道,实际上有一个表“ Task_Dtl”,其中包含我在case语句中使用的所有部分(A,B,C,D)。并可以使用字段(组织,零件等)链接到查询中的两个表
我的问题是,有没有一种方法可以使用此表来摆脱查询(case语句)中的硬编码。挑战在于这些是表中的行,但我需要将它们作为结果集的列。
我查看了透视操作,但意识到将 ONE 表的行更改为列或反之亦然时使用了透视操作。但是我需要在这里使用其他表进行数量等操作。是否可以在此处使用数据透视表?如果是,如何?除此以外。还有另一种方法可以实现这一目标。我们非常感谢您的帮助。