oracle unpivot for name
时间: 2024-09-14 22:06:41 浏览: 36
UNPIVOT是Oracle数据库中的一个操作,用于将行中的列转换为行,具体来说是将数据从宽格式转换为长格式。使用UNPIVOT操作可以帮助你将多个列值转换为单一列值,并且可以与行结合来形成新的行。
UNPIVOT操作通常与PIVOT操作相对,PIVOT是将行中的列值转换为多个列的操作。UNPIVOT的基本语法如下:
```
SELECT <非透视列>,
<透视列的名称> AS <新列名>,
<值列的名称> AS <值列新名称>
FROM
(
SELECT <非透视列>, <列1>, <列2>, ..., <列n>
FROM <表名>
)
UNPIVOT
(
<值列的名称> FOR <透视列的名称> IN (<列1>, <列2>, ..., <列n>)
);
```
在这个语法中,`<非透视列>`是不参与UNPIVOT操作的列,`<列1>, <列2>, ..., <列n>`是被UNPIVOT转换的列,`<透视列的名称>`是转换后新生成的列名,`<值列的名称>`是对应的值列的新名称。
例如,假设你有一个名为`sales`的表,它包含季度销售数据,每行代表一个产品在四个季度的销售数据。使用UNPIVOT你可以将每个季度的销售数据转换为单列,代码如下:
```
SELECT product_id, quarter, amount
FROM
(
SELECT product_id, Q1, Q2, Q3, Q4
FROM sales
)
UNPIVOT
(
amount FOR quarter IN (Q1, Q2, Q3, Q4)
);
```
在这个例子中,`product_id`是不变的列,`Q1, Q2, Q3, Q4`是原始数据表中的列名,表示不同季度的销售数据,而`amount`和`quarter`则是UNPIVOT之后生成的新列名。
阅读全文