sql server 数据行转列
时间: 2023-11-23 09:07:12 浏览: 84
SQL Server 数据行转列
在SQL Server中,可以使用PIVOT和UNPIVOT函数将数据行转换为列或列转换为行。
1. 将数据行转换为列(PIVOT函数)
PIVOT函数将行数据转换为列数据。以下是一个示例:
假设有一个名为Sales的表,其中包含以下数据:
| Year | Quarter | Sales |
|------|---------|-------|
| 2019 | Q1 | 100 |
| 2019 | Q2 | 200 |
| 2019 | Q3 | 300 |
| 2019 | Q4 | 400 |
| 2020 | Q1 | 500 |
| 2020 | Q2 | 600 |
| 2020 | Q3 | 700 |
| 2020 | Q4 | 800 |
现在,我们想要将每个季度的销售额作为列来显示。可以使用以下查询:
```sql
SELECT Year, [Q1], [Q2], [Q3], [Q4]
FROM
(SELECT Year, Quarter, Sales
FROM Sales) AS SourceTable
PIVOT
(
SUM(Sales)
FOR Quarter IN ([Q1], [Q2], [Q3], [Q4])
) AS PivotTable;
```
输出结果如下:
| Year | Q1 | Q2 | Q3 | Q4 |
|------|----|----|----|----|
| 2019 | 100 | 200 | 300 | 400 |
| 2020 | 500 | 600 | 700 | 800 |
2. 将列转换为行(UNPIVOT函数)
UNPIVOT函数将列数据转换为行数据。以下是一个示例:
假设有一个名为Sales的表,其中包含以下数据:
| Year | Q1 | Q2 | Q3 | Q4 |
|------|----|----|----|----|
| 2019 | 100 | 200 | 300 | 400 |
| 2020 | 500 | 600 | 700 | 800 |
现在,我们想要将每个季度的销售额作为行来显示。可以使用以下查询:
```sql
SELECT Year, Quarter, Sales
FROM
(SELECT Year, Q1, Q2, Q3, Q4
FROM Sales) AS SourceTable
UNPIVOT
(
Sales FOR Quarter IN ([Q1], [Q2], [Q3], [Q4])
) AS UnpivotTable;
```
输出结果如下:
| Year | Quarter | Sales |
|------|---------|-------|
| 2019 | Q1 | 100 |
| 2019 | Q2 | 200 |
| 2019 | Q3 | 300 |
| 2019 | Q4 | 400 |
| 2020 | Q1 | 500 |
| 2020 | Q2 | 600 |
| 2020 | Q3 | 700 |
| 2020 | Q4 | 800 |
阅读全文