sqlserver 存储过程行转列
时间: 2023-06-30 12:20:06 浏览: 64
在 SQL Server 中,可以使用 PIVOT 操作符将行数据转换为列数据。假设有一个表 Table1,其中包含了以下数据:
```
ID Name Value
1 A 10
1 B 20
2 A 30
2 B 40
```
我们需要将 Name 列的值作为列,Value 列的值作为值,将数据行转换为列,可以使用以下存储过程:
```
CREATE PROCEDURE PivotTable
AS
BEGIN
DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX);
SELECT @cols = STUFF((SELECT distinct ',' + QUOTENAME(Name)
FROM Table1
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
SET @query = 'SELECT ID, ' + @cols + ' from
(
select ID, Name, Value
from Table1
) x
pivot
(
max(Value)
for Name in (' + @cols + ')
) p '
EXECUTE(@query)
END
```
这个存储过程中,我们首先使用 STUFF 函数和 XML PATH 将 Name 列中的不同值拼接成一个字符串,作为列名。然后使用 PIVOT 操作符将行数据转换为列数据,max(Value) 表示在转换时取 Value 列中的最大值。最后执行生成的 SQL 语句。
执行以上存储过程,就可以得到以下结果:
```
ID A B
1 10 20
2 30 40
```
其中,A 和 B 列的值分别对应原来的 Name 列的值。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)