列转行在SQL怎么写
时间: 2024-10-12 18:12:00 浏览: 22
在SQL中将列转化为行的操作通常称为"UNION ALL"、"PIVOT"或使用`WITH ROLLUP`或`CROSS APPLY`结合`XML PATH`。这里我会给出几种常见的方法:
1. **使用PIVOT**(如果数据库支持):
对于MySQL、PostgreSQL和SQL Server等支持动态Pivot的数据库,你可以这样做:
```sql
SELECT *
FROM (
SELECT column1, column2, value_column AS value
FROM table_name
) src
.pivot (
MAX(value)
FOR column1 IN (value1, value2, ...) -- 将所有你想转换成行的列列出来
);
```
2. **使用UNION ALL + CASE语句**(通用方法):
对于不支持动态Pivot的数据库,可以使用UNION ALL和CASE语句手动创建新行:
```sql
SELECT column1, column2, value_column
FROM table_name
UNION ALL
SELECT column1, 'column_name_1', value_column
FROM table_name
WHERE column1 = 'value1'
UNION ALL
SELECT column1, 'column_name_2', value_column
FROM table_name
WHERE column1 = 'value2';
-- 以此类推,替换所有的'value_n' 和对应的列名
```
3. **使用XML PATH**(适用于某些数据库):
```sql
SELECT A.column1,
CAST(CAST('<row>' +
XMLAGG(
'<cell>' || B.column2 || '</cell>'
)
|| '</row>' AS CXMLTYPE).getStringVal() AS VARCHAR(MAX))
FROM table_name A
CROSS APPLY (
SELECT value_column
PIVOT (
MAX(value_column)
FOR column1 IN ('value1', 'value2', ...)
)
) B
GROUP BY A.column1;
```
请根据你的数据库系统特性选择合适的方法。如果你需要针对特定情况,记得提供更多的上下文信息。
阅读全文