Plsql 使用pivot进行查询?

Plsql 使用pivot进行查询?,plsql,Plsql,我有以下数据 WITH got_grp AS ( SELECT '1111' AS LINE_NBR, '522' AS AMOUNT_ID, 'A' AS I_N, '0' AS AMOUNT FROM dual UNION ALL SELECT '1111' AS LINE_NBR, '121' AS AMOUNT_ID, 'A' AS I_N, '0' AS AMOUNT FROM dual UNION ALL SELECT '1112

我有以下数据

WITH    got_grp   AS
(
 SELECT  '1111' AS LINE_NBR, '522' AS AMOUNT_ID, 'A' AS I_N,  '0'    AS AMOUNT    FROM dual  UNION ALL
 SELECT  '1111' AS LINE_NBR, '121' AS AMOUNT_ID, 'A' AS I_N,  '0'    AS AMOUNT    FROM dual  UNION ALL
 SELECT  '1112' AS LINE_NBR, '522' AS AMOUNT_ID, 'A' AS I_N,  '1'    AS AMOUNT    FROM dual  UNION ALL
 SELECT  '1113' AS LINE_NBR, '122' AS AMOUNT_ID, 'A' AS I_N,  '12'   AS AMOUNT    FROM dual  UNION ALL
 SELECT  '1114' AS LINE_NBR, '522' AS AMOUNT_ID, 'A' AS I_N,  '14.4' AS AMOUNT    FROM dual  UNION ALL
 SELECT  '1116' AS LINE_NBR, '121' AS AMOUNT_ID, 'A' AS I_N,  '11'   AS AMOUNT    FROM dual  UNION ALL
)
我想检索某个金额ID的特定I\u N的总计。 我希望查询返回所有金额(121122522)的行中存在的值,以及 金额大于30(金额\u ID\u 121+金额\u ID\u 122+金额\u ID\u 522>30)

例如:

I|N |金额| ID | 121 |金额| ID | 122 |金额| ID | 522

A | 11 | 12 | 15.4


您能帮我一下吗?

对于特定的
金额ID
值(121122522),请在
PIVOT
子句中使用
SUM
聚合函数。然后,您可以对金额进行
SUM
并按
您的
I\u N
列进行分组。
WITH got_grp   AS
(
 SELECT  '1111' AS LINE_NBR, '522' AS AMOUNT_ID, 'A' AS I_N,  '0'    AS AMOUNT    FROM dual  UNION ALL
 SELECT  '1111' AS LINE_NBR, '121' AS AMOUNT_ID, 'A' AS I_N,  '0'    AS AMOUNT    FROM dual  UNION ALL
 SELECT  '1112' AS LINE_NBR, '522' AS AMOUNT_ID, 'A' AS I_N,  '1'    AS AMOUNT    FROM dual  UNION ALL
 SELECT  '1113' AS LINE_NBR, '122' AS AMOUNT_ID, 'A' AS I_N,  '12'   AS AMOUNT    FROM dual  UNION ALL
 SELECT  '1114' AS LINE_NBR, '522' AS AMOUNT_ID, 'A' AS I_N,  '14,4' AS AMOUNT    FROM dual  UNION ALL
 SELECT  '1116' AS LINE_NBR, '121' AS AMOUNT_ID, 'A' AS I_N,  '11'   AS AMOUNT    FROM dual
)
select LINE_NBR, I_N, AMOUNT_ID_522, AMOUNT_ID_121, AMOUNT_ID_122
from(
select LINE_NBR, AMOUNT_ID, I_N, AMOUNT
FROM got_grp)
PIVOT(SUM(AMOUNT) FOR AMOUNT_ID IN ('522' AS AMOUNT_ID_522, '121' AS AMOUNT_ID_121, '122' AS AMOUNT_ID_122)
)
WHERE
 NVL(AMOUNT_ID_522,0)+NVL(AMOUNT_ID_121,0)+NVL(AMOUNT_ID_122,0)>30;
WITH got_grp   AS
(
 SELECT  '1111' AS LINE_NBR, '522' AS AMOUNT_ID, 'A' AS I_N,  '0'    AS AMOUNT    FROM dual  UNION ALL
 SELECT  '1111' AS LINE_NBR, '121' AS AMOUNT_ID, 'A' AS I_N,  '0'    AS AMOUNT    FROM dual  UNION ALL
 SELECT  '1112' AS LINE_NBR, '522' AS AMOUNT_ID, 'A' AS I_N,  '1'    AS AMOUNT    FROM dual  UNION ALL
 SELECT  '1113' AS LINE_NBR, '122' AS AMOUNT_ID, 'A' AS I_N,  '12'   AS AMOUNT    FROM dual  UNION ALL
 SELECT  '1114' AS LINE_NBR, '522' AS AMOUNT_ID, 'A' AS I_N,  '14.4' AS AMOUNT    FROM dual  UNION ALL
 SELECT  '1116' AS LINE_NBR, '121' AS AMOUNT_ID, 'A' AS I_N,  '11'   AS AMOUNT    FROM dual
)
select *
  from got_grp PIVOT(SUM(AMOUNT) FOR AMOUNT_ID IN('522' AS AMOUNT_ID_522,
                                              '121' AS AMOUNT_ID_121,
                                              '122' AS AMOUNT_ID_122))
 WHERE AMOUNT_ID_522 IS NOT NULL
   AND AMOUNT_ID_121 IS NOT NULL
   AND AMOUNT_ID_122 IS NOT NULL
   AND AMOUNT_ID_522 + AMOUNT_ID_121 + AMOUNT_ID_122 > 30;