我正在寻找oracle.i中的动态转置行到列已经尝试使用pivot或在解码的帮助下进行转置但是我需要提供硬编码列名称,因为我已经给出了#1;第1轮(AJM-15)'和第二轮(AJM-15)'在下面的查询但我试图动态地实现这些值是可能的。
SELECT CC.WARD,SUM(DECODE(CC.QTR, 'Round 1 (AJM-15)',round(CC.METRIC_VALUE,3), 0)) AS "Round 1 (AJM-15)",
SUM(DECODE(CC.QTR, 'Round 2 (AJM-15)',round(CC.METRIC_VALUE,3), 0)) AS "Round 2 (AJM-15)"
From (
SELECT SUM(DENO) AS METRIC_VALUE,CENTRE,QTR,WARD FROM (
select CENTRE,QTR,WARD,sum(COUNTS) AS DENO from FACT_AVF_RESP
where
outlet_type in (SELECT distinct outlet_type
FROM FACT_AVF_RESP m
WHERE outlet_type IN (SELECT distinct outlet_type FROM FACT_AVF_RESP)
AND 'All' = 'All'
UNION
SELECT distinct outlet_type
FROM FACT_AVF_RESP n
WHERE outlet_type ='All'
) and
CENTRE= 'AHMEDABAD' and
gpi in (SELECT distinct gpi
FROM FACT_AVF_RESP o
WHERE gpi IN (SELECT distinct gpi FROM FACT_AVF_RESP)
AND 'All' = 'All'
UNION
SELECT distinct gpi
FROM FACT_AVF_RESP o
WHERE gpi ='All'
) AND
QTR in (select distinct p.qtr from fact_avf_nd p where p.qtr
between 'Round 1 (AJM-15)' and 'Round 2 (AJM-15)')
group by QTR,CENTRE,WARD
order by QTR
)group by CENTRE,QTR,WARD
ORDER BY QTR,WARD)cc
group by CC.WARD;
在中间条件下,我必须根据提供参数值提供from和to参数值,我的qtr列值将会出现,并且该列值应该动态转置。
答案 0 :(得分:0)
如果不使用动态sql,无法实现这一目标。
OCI和JDBC api允许调用者在执行之前描述查询的列。您想要的不是确定性的,即Oracle可能会注意到在评估查询时还有其他列要添加。这违反了API合同。
无论数据性质如何,每个查询结果都必须具有固定数量的列。
还有构造PIVOT XML
,它可以做你想要的。将只添加一列,在XML文档中连接动态添加的列。