sql將查詢結果以列拼湊成表
时间: 2024-07-25 12:01:16 浏览: 39
SQL函数字符串转换成表
在 SQL 中,如果你想将查询结果的某些列合并成新的行(即展平或重塑数据),你可以使用 `UNION ALL` 或者 `CASE` 表达式结合 `ROW_NUMBER()` 或其他窗口函数。以下是两种常见的方法:
**1. 使用 UNION ALL 和 CASE WHEN**:
假设你有原始数据表 `sales`,其中有两个日期相关的列 `start_date` 和 `end_date`,你想把它们合并到一个新的表中,只保留一天的数据:
```sql
SELECT start_date AS date, sales_info
FROM (
SELECT start_date, sales_info
FROM sales
UNION ALL
SELECT end_date, sales_info
FROM sales
) combined_sales
ORDER BY date;
```
这里,`UNION ALL` 把两个日期列都包括进来,然后 `CASE WHEN` 根据需要选择 `start_date` 或 `end_date` 作为新表的日期列。
**2. 使用 PIVOT (如果支持) 或 CUBE/CROSS APPLY (某些数据库如 SQL Server)**:
对于更复杂的情况,如 MySQL 的 `PIVOT` 或者 SQL Server 的 `PIVOT`, `CROSS APPLY` 可以用于动态生成新列:
```sql
WITH sales_pivot AS (
SELECT start_date, end_date, sales_info,
ROW_NUMBER() OVER (PARTITION BY start_date, sales_info ORDER BY (SELECT NULL)) AS row_num
FROM sales
)
SELECT *
FROM sales_pivot
PIVOT (
MAX(row_num)
FOR start_date IN ([start_date], [end_date])
);
```
这里使用了窗口函数 `ROW_NUMBER()` 给每行分配一个唯一的编号,并用 `PIVOT` 把日期列变成新行。
阅读全文