oracle 按列拆分多行
时间: 2023-06-28 16:04:45 浏览: 105
你可以使用 Oracle 的 PIVOT 操作来按列拆分多行。以下是一个示例:
假设你有一个表格,其中包含以下数据:
```
ID | Name | Value
------------------
1 | John | 10
1 | John | 20
1 | John | 30
2 | Sarah | 15
2 | Sarah | 25
```
你想要按照以下格式进行拆分:
```
ID | Name | Value1 | Value2 | Value3
-------------------------------------
1 | John | 10 | 20 | 30
2 | Sarah | 15 | 25 | NULL
```
你可以使用以下 SQL 语句来执行此操作:
```
SELECT *
FROM (
SELECT ID, Name, Value, 'Value' || ROW_NUMBER() OVER (PARTITION BY ID, Name ORDER BY Value) AS col
FROM my_table
)
PIVOT (
MAX(Value) FOR col IN ('Value1', 'Value2', 'Value3')
)
```
在这个查询中,内部 SELECT 语句使用 ROW_NUMBER() 函数为每个 ID 和 Name 组合中的每个值分配一个列号。然后,PIVOT 操作将这些列号作为列名,并将每个值插入相应的列中。
注意,这个查询假定每个 ID 和 Name 组合最多只有三个值。如果你有更多的值,你需要添加更多的列名和 ROW_NUMBER() 分配的列号。
阅读全文