SQL将行转换为没有数据透视的列

时间:2015-03-01 12:13:36

标签: c# sql sql-server pivot

我有一个名为STUDENTS的表,列(LNAME, FNAME, PROGRAM)全部为VARCHAR。以下是使用MS SQL Server 2014添加值的初始结果:

TABLE STUDENTS:

LNAME-------FNAME-------PROGRAM

LEGEND-----MARK--------------IT

SANCHEZ----ERIC---------------IT

RHODES-----JOHN--------------CS

YOUNG-------ART----------------CS

SPARKS------CATH--------------IS

BATUM--------TIM------------------IS

我希望我的桌子看起来像这样:

IT-----------------------------------------CS-----------------------------------------IS

LEGEND,MARK---------------RHODES,JOHN-----------------------SPARKS,CATH

SANCHEZ,ERIC-----------------YOUNG,ART-----------------------------BATUM,TIM

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

我倾向于使用条件聚合来解决这些问题。问题是你没有"行号"用于分类。在SQL Server(和大多数其他数据库)中,您可以使用row_number()

select max(case when program = 'IT' then lname + ',' + fname end) as prog_it,
       max(case when program = 'CS' then lname + ',' + fname end) as prog_cs,
       max(case when program = 'IS' then lname + ',' + fname end) as prog_is       
from (select s.*,
             row_number() over (partition by program order by (select null)) as seqnum
      from students s
     ) s
group by seqnum;

你可以在MySQL中做类似的事情,但它看起来很不一样。