是否可以将每个相同 ID 的多个行值作为列返回?
如果我的 table 是:
ID | Value |Column_data
--------------------------------
1 | a | DATA1
1 | b | DATA1
2 | c | DATA2
2 | x | DATA2
3 | y | DATA3
3 | z | DATA3
(每个 Id 始终有 2 个值)
选择应该返回:
1,a,b,数据1
2,c,x,数据2
3,y,z,数据3
最佳答案
您没有说明您使用的 Oracle 版本,但如果您使用的是 Oracle 11g+,那么您可以使用 PIVOT
函数将此数据转换为列:
select id,
C1,
C2,
column_data
from
(
select id, value, column_data,
row_number() over(partition by id order by id, value) rn
from yourtable
)
pivot
(
max(value)
for rn in ('1' as C1, '2' as C2)
)
order by id
在 Oracle 11g 之前,您可以使用带有 CASE
表达式的聚合函数将行转换为列:
select id,
max(case when rn = 1 then value end) C1,
max(case when rn = 2 then value end) C2,
column_data
from
(
select id, value, column_data,
row_number() over(partition by id order by id, value) rn
from yourtable
)
group by id, column_data
order by id
两个查询的结果是:
| ID | C1 | C2 | COLUMN_DATA |
------------------------------
| 1 | a | b | DATA1 |
| 2 | c | x | DATA2 |
| 3 | y | z | DATA3 |
关于sql - 将多行的值作为列返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14829361/