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;