如何使用表中的行作为查询中从多个表中获取的结果的列?

时间:2018-10-02 22:08:21

标签: oracle pivot

我有以下查询以生成特定报告

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 表的行更改为列或反之亦然时使用了透视操作。但是我需要在这里使用其他表进行数量等操作。是否可以在此处使用数据透视表?如果是,如何?除此以外。还有另一种方法可以实现这一目标。我们非常感谢您的帮助。

0 个答案:

没有答案