oraclesql中的PIVOT
我编写了一个查询,如下所示oraclesql中的PIVOT,sql,oracle,oracle11g,pivot,Sql,Oracle,Oracle11g,Pivot,我编写了一个查询,如下所示 SELECT DISTINCT SBPC1.BATCH_ID AS BATCH_ID, Sbpc1.Registration_Id AS Registration_Id, Submtd_Val_Code.Submtd_Val_Cd, Submtd_Val_Code.Submtd_Val_Amount , Submtd_Val_Code.Submtd_Bill_Processing_Cd_Seq --Submtd_Val_Cod
SELECT DISTINCT SBPC1.BATCH_ID AS BATCH_ID,
Sbpc1.Registration_Id AS Registration_Id,
Submtd_Val_Code.Submtd_Val_Cd,
Submtd_Val_Code.Submtd_Val_Amount ,
Submtd_Val_Code.Submtd_Bill_Processing_Cd_Seq
--Submtd_Val_Code.rownumber
--rownum
FROM TEMPORARY_EXTRACT_BASE PARTITION (TEMPORARY_EXTRACT_BA_815771) TEB,
Submtd_Bill_Processing_Cd Sbpc1 ,
(SELECT Sbpc1.Batch_Id AS Batch_Id,
Sbpc1.Registration_Id AS Registration_Id,
Submtd_Val_Cd,
SBPC1.SUBMTD_VAL_AMOUNT,
Sbpc1.Submtd_Bill_Processing_Cd_Seq,
rownum AS rownumber
FROM Temporary_Extract_Base Partition (Temporary_Extract_Ba_815771) Teb,
Submtd_Bill_Processing_Cd Sbpc1
WHERE SBPC1.BATCH_ID = TEB.EXTRACT_BATCH_ID
AND SBPC1.REGISTRATION_ID=TEB.REGISTRATION_ID
AND TEB.BATCH_ID = 815771
AND SBPC1.BATCH_ID IN
(SELECT BATCH_ID
FROM PBLSH_BATCH_INCLUSION
WHERE DATA_PBLSH_ID IN
(SELECT DATA_PBLSH_ID FROM Batch WHERE Batch_Id = 815771
)
)
AND Upper(Sbpc1.Submtd_Val_Cd) <> 'NOT AVAILABLE'
AND Upper(Sbpc1.Submtd_Val_Cd) <> 'NOT SUPPLIED'
ORDER BY TEB.REGISTRATION_ID,
Sbpc1.SUBMTD_BILL_PROCESSING_CD_SEQ
)Submtd_Val_Code
WHERE SBPC1.BATCH_ID = TEB.EXTRACT_BATCH_ID
AND SBPC1.REGISTRATION_ID=TEB.REGISTRATION_ID
AND TEB.BATCH_ID = 815771
AND SBPC1.BATCH_ID IN
(SELECT BATCH_ID
FROM PBLSH_BATCH_INCLUSION
WHERE DATA_PBLSH_ID IN
(SELECT DATA_PBLSH_ID FROM BATCH WHERE Batch_Id = 815771
)
)
AND Submtd_Val_Code.Registration_Id =Teb.Registration_Id
ORDER BY SBPC1.BATCH_ID,
SBPC1.REGISTRATION_ID,
Submtd_Val_Code.SUBMTD_BILL_PROCESSING_CD_SEQ;
其输出为:
对于每个注册id,我需要如下输出:
前5个有效值应加载到相应的列中。如果通过一个select语句而不使用存储过程来实现,效果会更好
任何人请帮忙。。。提前感谢 仅当所选值列表中存在任何聚合函数时,才能使用Pivot: 使用pivot的示例如下:
SELECT *
FROM (SELECT product_code, quantity
FROM pivot_test)
PIVOT (SUM(quantity) AS sum_quantity FOR (product_code) IN ('A' AS a, 'B' AS b, 'C' AS c));
如果可以使用一个聚合函数,那么可以尝试将整个select语句作为cte公共表表达式,然后将该表与pivot方法一起使用
例如:
with cte as
(----- your sql statement--- )
select * from cte
pivot (sum(val) for name in ( select name from cte ) );
仅当所选值列表中存在任何聚合函数时,才能使用Pivot: 使用pivot的示例如下:
SELECT *
FROM (SELECT product_code, quantity
FROM pivot_test)
PIVOT (SUM(quantity) AS sum_quantity FOR (product_code) IN ('A' AS a, 'B' AS b, 'C' AS c));
如果可以使用一个聚合函数,那么可以尝试将整个select语句作为cte公共表表达式,然后将该表与pivot方法一起使用
例如:
with cte as
(----- your sql statement--- )
select * from cte
pivot (sum(val) for name in ( select name from cte ) );
是的,pivot仅用于此目的。您可以尝试以下操作:以cte作为代码选择不同的SBPC1.BATCH_ID作为批次_ID,SBPC1.Registration_ID作为注册_ID,Submtd_Val_代码。Submtd_Val_Cd,Submtd_Val_代码。Submtd_Val_金额,Submtd_Val_Code.Submtd_Bill_Processing_Cd_Seq-您的总查询--从cte pivot sumRegistration_Id中选择*用于46057074605708中的注册_Id,。。。。代码是,pivot仅用于此目的。您可以尝试以下操作:以cte作为代码选择不同的SBPC1.BATCH_ID作为批次_ID,SBPC1.Registration_ID作为注册_ID,Submtd_Val_代码。Submtd_Val_Cd,Submtd_Val_代码。Submtd_Val_金额,Submtd_Val_Code.Submtd_Bill_Processing_Cd_Seq-您的总查询--从cte pivot sumRegistration_Id中选择*用于46057074605708中的注册_Id,。。。。密码