oracle SQL某列转行
时间: 2024-08-14 14:10:10 浏览: 48
在Oracle SQL中,将某一列的数据转换成行(即扁平化或膨胀数据),通常通过`UNION ALL`, `PIVOT`或者使用`XMLagg`函数结合`XMLTable`来实现。如果你有一个表,比如:
```sql
CREATE TABLE sales (
order_id INT,
product_code VARCHAR(50),
quantity_sold NUMBER
);
```
如果你想把`product_code`对应的多次销售合并到一行,可以使用`PIVOT`,例如:
```sql
SELECT *
FROM sales
PIVOT(
SUM(quantity_sold)
FOR product_code IN ('ProductA' AS 'ProductA_Sales', 'ProductB' AS 'ProductB_Sales')
) AS pivoted_table;
```
这会创建一个新的行集,每个订单ID只有一个产品对应的数量。
如果数据包含XML结构,`XMLTable`和`XMLagg`可以更方便地操作:
```sql
SELECT order_id,
XMLTABLE(
xml_column AS CDATA,
'/row[product_code = current_value]/quantity_sold'
PASSING xml_column
COLUMNS product_code VARCHAR2(50),
quantity_sold NUMBER
) as row_data
FROM your_table;
```
阅读全文