数据库的表里面行列转换的方法有几种sql写法
时间: 2024-10-25 13:10:31 浏览: 24
在SQL中,将行转列的操作通常称为“透视”或“笛卡尔积展开”,主要有两种常见的写法:
1. 使用PIVOT(可变分区):这是一种特定于某些数据库系统的功能,如Oracle、SQL Server和MySQL的`PIVOT`语法。例如,在SQL Server中:
```sql
SELECT * FROM table
PIVOT (
MAX(column_topivot)
FOR column_name_in_rows IN (value1, value2, ...)
);
```
这会把`column_name_in_rows`的值作为新列名,`column_topivot`的数据聚合到对应的列。
2. 使用UNION ALL + CASE或CASE WHEN:这是一个通用的方法,适用于所有支持标准SQL的数据库,如MySQL和PostgreSQL:
```sql
SELECT column1, column2,
MAX(CASE WHEN new_column = 'value1' THEN value ELSE NULL END) AS value1,
MAX(CASE WHEN new_column = 'value2' THEN value ELSE NULL END) AS value2
FROM (
SELECT column1, column2, value AS value, 'value1' AS new_column
UNION ALL
SELECT column1, column2, value, 'value2'
-- ... 重复添加其他值得情况
) subquery
GROUP BY column1, column2;
```
这里假设`new_column`是你想要转换的列,`value`是原始数据。
阅读全文