pun*_*289 4 sql oracle pivot unpivot oracle10g
这是数据:
id name period data1 data2
===================================================
111 name1 monthly aaaaa bbbbb
111 name1 quaterly ccccc ddddd
111 name1 halfYearly eeeee fffff
111 name1 annually ggggg hhhhh
Run Code Online (Sandbox Code Playgroud)
我想查询在一行中获取数据的查询
id name monthlYdata1 monthlYdata2 quaterlydata1 quaterlydata2 halfYearlydata1 halfYearlydata2 annuallydata1 annuallydata2
==========================================================================================================================================================
111 name1 aaaaa bbbbb ccccc ddddd eeeee fffff ggggg hhhhh
Run Code Online (Sandbox Code Playgroud)
您没有指定您正在使用的RDBMS,但这将适用于所有这些:
select id,
name,
max(case when period = 'monthly' then data1 end) as MonthlyData1,
max(case when period = 'monthly' then data2 end) as MonthlyData2,
max(case when period = 'quaterly' then data1 end) as quarterlyData1,
max(case when period = 'quaterly' then data2 end) as quarterlyData2,
max(case when period = 'halfYearly' then data1 end) as halfYearlyData1,
max(case when period = 'halfYearly' then data2 end) as halfYearlyData2,
max(case when period = 'annually' then data1 end) as annuallyData1,
max(case when period = 'annually' then data2 end) as annuallyData2
from yourtable
group by id, name
Run Code Online (Sandbox Code Playgroud)
如果您正在使用具有PIVOT函数的RDBMS ,那么您可以执行以下操作,同时使用UNPIVOT和PIVOT生成结果.由于舍甫琴科中号指出UNPIVOT是假设两者的数据类型data1和data2是同一类型的,如果没有,那么转换需要采取地方UNPIVOT数据:
Oracle 11g:
select *
from
(
select id, name, value,
period||data new_col
from yourtable
unpivot
(
value for data in (data1, data2)
) u
) x
pivot
(
max(value)
for new_col in ('monthlyDATA1', 'monthlyDATA2',
'quaterlyDATA1', 'quaterlyDATA2',
'halfYearlyDATA1', 'halfYearlyDATA2',
'annuallyDATA1', 'annuallyDATA2')
) p
Run Code Online (Sandbox Code Playgroud)
SQL Server:
select *
from
(
select id, name, value,
period+data new_col
from yourtable
unpivot
(
value for data in (data1, data2)
) u
) x
pivot
(
max(value)
for new_col in ('monthlyDATA1', 'monthlyDATA2',
'quaterlyDATA1', 'quaterlyDATA2',
'halfYearlyDATA1', 'halfYearlyDATA2',
'annuallyDATA1', 'annuallyDATA2')
) p
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
340 次 |
| 最近记录: |