Oracle SQL重新格式化表
我有一张这样的桌子:Oracle SQL重新格式化表,sql,oracle12c,Sql,Oracle12c,我有一张这样的桌子: COMPANY ZONE SITE DATE KWHTOTAL KWHIT KWHCLIMA 1 0 11 01/01/2018 10000 5000 3000 2 0 23 01/02/2018 7000 4000 1500 ... 我需要把桌子换成这个 COMPANY ZONE SITE DATE
COMPANY ZONE SITE DATE KWHTOTAL KWHIT KWHCLIMA
1 0 11 01/01/2018 10000 5000 3000
2 0 23 01/02/2018 7000 4000 1500
...
我需要把桌子换成这个
COMPANY ZONE SITE DATE KWH TYPE
1 0 11 01/01/2018 10000 KWHTOTAL
1 0 11 01/01/2018 5000 KWHIT
1 0 11 01/01/2018 3000 KWHCLIMA
2 0 23 01/02/2018 7000 KWHTOTAL
2 0 23 01/02/2018 4000 KWHIT
2 0 23 01/02/2018 1500 KWHCLIMA
感谢您的帮助一种方法是使用
union all
。但是,Oracle 12c支持横向联接。因此,您可以:
select t.COMPANY, t.ZONE, t.SITE, t.DATE, tt.KWH, tt.TYPE
from t cross apply
(select 'KWHTOTAL' as type, KWHTOTAL as kwh from dual union all
select 'KWHIT' as type, KWHIT as kwh from dual union all
select 'KWHCLIMA' as type, KWHCLIMA as kwh from dual
) tt;
一种方法是使用
union all
。但是,Oracle 12c支持横向联接。因此,您可以:
select t.COMPANY, t.ZONE, t.SITE, t.DATE, tt.KWH, tt.TYPE
from t cross apply
(select 'KWHTOTAL' as type, KWHTOTAL as kwh from dual union all
select 'KWHIT' as type, KWHIT as kwh from dual union all
select 'KWHCLIMA' as type, KWHCLIMA as kwh from dual
) tt;
您可以尝试使用
UNPIVOT
,Oracle12c
应支持此功能:
SELECT *
FROM your_table
UNPIVOT (KWH FOR kwh_field IN (KWHTOTAL AS 'KWHTOTAL', KWHIT AS 'KWHIT',
KWHCLIMA AS 'KWHCLIMA'))
您可以尝试使用
UNPIVOT
,Oracle12c
应支持此功能:
SELECT *
FROM your_table
UNPIVOT (KWH FOR kwh_field IN (KWHTOTAL AS 'KWHTOTAL', KWHIT AS 'KWHIT',
KWHCLIMA AS 'KWHCLIMA'))
谢谢你的帮助!谢谢你的帮助!谢谢你的帮助!。我选择了你的方法,它花费的时间更少。谢谢你的帮助!。我选择你的方法,它花费的时间更少。