sql行列转换

  1. 首先我们建立一张表,名为RToC,各个字段的设计如下图,分别是name,course,score,表示姓名,成绩与分数,如图所示。

  2. 2

    我们往表中加入数据,分别添加小明与小花的语文和数学成绩,如图所示。

  3. 3

    接下来,我们要进行行列转换,列应该是name,语文,数学。我们首先要考虑是如何得到列名,我们可以通过分组得到课程名称。如图所示,我们通过分组语句,从查询结果我们可以看出课程名的拼接字符串。

    代码:

    declare @sql varchar(200)
    select @sql=ISNULL(@sql+,,‘‘)+course from RToC group by course
    select @sql

    效果:

  4. 4

    接下来,关键的行转列的函数pivot出场了,通过这个函数我们把分数填充到转换的列语文、数学的列值。

    declare @sql varchar(200)
    select @sql=ISNULL(@sql+,,‘‘)+course from RToC group by course
    set @sql=select * from RToC pivot(max(score) for course in (+@sql+)) t  
    exec(@sql)
  5. 5

    我们运行后,可以得到行转列的结果,如下图所示。

  6. 6

    通过以上几个步骤,我们就可以轻松的实现行列转换了。同样,我们如果要把列转换成行, 应该怎么做呢?同样我们可以采用unpivot函数轻松实现。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。