SQLServer中将列数据转换为行(sqlserver列转行)

数据

SQL Server提供了一种将列数据转换为行数据的方法,该方法可以根据个人需要来产生新的变换结果。在普通情况下,数据都被组织在列中,每列都有自己的值,而没有一行全是相同的数据,但是,很多情况需要将一组数据每行表现出来,以满足复杂数据分析的需要,这时就需要使用将列转行的SQL语句。

对于SQL Server列转行,一般使用的语句如下:

`SELECT * FROM 原表

UNPIVOT (列值 FOR 列名 IN(列1,列2,…)) AS 变换表`

例如,有一个表 scott_test,有id,col_name列,以及4个数据列(data1,data2,data3,data4):

| id | col_name | data1 | data2 | data3 | data4 |

| :–: | :–: | :–: | :–: | :–: | :–: |

| 1 | apple | 20 | 5 | 10 | 7 |

| 2 | orange | 25 | 11 | 9 | 8 |

将以上这个表列转行,语句如下:

`SELECT id,col_name,data

FROM scott_test

UNPIVOT (data FOR col_data IN(data1,data2,data3,data4)) AS unpvt`

执行该语句后得到的结果如下:

| id | col_name | col_data | data |

| :–: | :–: | :–: | :–: |

| 1 | apple | data1 | 20 |

| 1 | apple | data2 | 5 |

| 1 | apple | data3 | 10 |

| 1 | apple | data4 | 7 |

| 2 | orange | data1 | 25 |

| 2 | orange | data2 | 11 |

| 2 | orange | data3 | 9 |

| 2 | orange | data4 | 8 |

从上面的结果可以看出,每一行的数据可以用一个data字段表示出来,而col_data列则表示data字段原来所在的数据列。

总而言之,SQL Server中可以使用UNPIVOT语句将一组列数据转换为行数据,这样可以让数据更加清楚、易读,也可以更好地进行数据分析。


数据运维技术 » SQLServer中将列数据转换为行(sqlserver列转行)