Oracle SQL数据透视转换
我的表格如下:Oracle SQL数据透视转换,sql,oracle,pivot,Sql,Oracle,Pivot,我的表格如下: SNF SFCM POOL QUOTA a US eng 11 a US sud 20 b UK aau 30 SNF SFCM eng sud aau a
SNF SFCM POOL QUOTA
a US eng 11
a US sud 20
b UK aau 30
SNF SFCM eng sud aau
a US 11 20
b UK 30
SELECT SNF, SFCM, eng_quota, sud_quota, aau_quota FROM nc_so1
PIVOT
(
SUM(QUOTA) AS QUOTA
FOR pool
IN ('eng' as eng, 'sud' as sud, 'aau' as aau)
)
但希望其显示如下:
SNF SFCM POOL QUOTA
a US eng 11
a US sud 20
b UK aau 30
SNF SFCM eng sud aau
a US 11 20
b UK 30
SELECT SNF, SFCM, eng_quota, sud_quota, aau_quota FROM nc_so1
PIVOT
(
SUM(QUOTA) AS QUOTA
FOR pool
IN ('eng' as eng, 'sud' as sud, 'aau' as aau)
)
我试着使用一个枢轴,如下所示
SELECT a.* FROM test
PIVOT
(
SUM(QUOTA) AS QUOTA
FOR pool
IN ('eng', 'sud', 'aau')
)
但似乎无法获得正确的输出
有人能给我提建议吗?另外,我想知道是否可以使用SQL语句代替“eng”、“sud”、“aau”。所以从测试中选择池
谢谢。您的查询应如下所示:
SNF SFCM POOL QUOTA
a US eng 11
a US sud 20
b UK aau 30
SNF SFCM eng sud aau
a US 11 20
b UK 30
SELECT SNF, SFCM, eng_quota, sud_quota, aau_quota FROM nc_so1
PIVOT
(
SUM(QUOTA) AS QUOTA
FOR pool
IN ('eng' as eng, 'sud' as sud, 'aau' as aau)
)
此外,使用SQL AFAIK生成动态列表也是不可能的。您的原始SQL只需稍作更改即可提供所需的结果:
SQL> with t (SNF, SFCM, POOL, QUOTA) as
2 (
3 select 'a','US','eng',11 from dual union all
4 select 'a','US','sud',20 from dual union all
5 select 'b','UK','aau',30 from dual
6 )
7 SELECT * FROM t
8 PIVOT
9 (
10 SUM(QUOTA)
11 FOR (pool)
12 IN ('eng' "ENG", 'sud' "SUD", 'aau' "AAU")
13 )
14 /
SNF SFCM ENG SUD AAU
--- ---- ---------- ---------- ----------
a US 11 20
b UK 30
注意:从dynamic pivot开始-只有XML表单可用:
SQL> with t (SNF, SFCM, POOL, QUOTA) as
2 (
3 select 'a','US','eng',11 from dual union all
4 select 'a','US','sud',20 from dual union all
5 select 'b','UK','aau',30 from dual
6 )
7 SELECT * FROM t
8 PIVOT XML
9 (
10 SUM(QUOTA)
11 FOR (pool)
12 IN (select pool from t)
13 )
14 /
SNF SFCM POOL_XML
--- ---- --------------------------------------------------
a US <PivotSet><item><column name = "POOL">aau</column>
<column name = "SUM(QUOTA)"></column></item><item>
<column name = "POOL">eng</column><column name = "
SUM(QUOTA)">11</column></item><item><column name =
"POOL">sud</column><column name = "SUM(QUOTA)">20
</column></item></PivotSet>
b UK <PivotSet><item><column name = "POOL">aau</column>
<column name = "SUM(QUOTA)">30</column></item><ite
m><column name = "POOL">eng</column><column name =
"SUM(QUOTA)"></column></item><item><column name =
"POOL">sud</column><column name = "SUM(QUOTA)"></
column></item></PivotSet>
它是PL/SQL,但您可以对动态SQL使用EXEC IMMEDIATE。@RobertCo此答案中没有PL/SQL代码。你的观点是什么?