group_number  synch_Experimentguid  course_name
0              4                    语文1 
0              3                    计算机   
0              1                    物理    
1              3                    计算机
1              4                    语文1 
2              3                    计算机
2              1                    物理
3              3                    计算机 
4              1                    物理
5              4                    语文1需要如下结果
group_number  synch_Experimentguid  course_name 
0             4,3,1                 语文1 ,计算机,物理
1             3,4                   计算机,语文1 
2             3,1                   计算机,物理
3             3                     计算机
4             1                     物理
5             4                     语文1
谢谢大家帮助           

解决方案 »

  1.   

    --带符号合并行列转换--有表t,其数据如下:
      a b
      1 1
      1 2
      1 3
      2 1
      2 2
      3 1
    --如何转换成如下结果:
      a b
      1 1,2,3
      2 1,2
      3 1 create table tb
    (
       a int,
       b int
    )
    insert into tb(a,b) values(1,1)
    insert into tb(a,b) values(1,2)
    insert into tb(a,b) values(1,3)
    insert into tb(a,b) values(2,1)
    insert into tb(a,b) values(2,2)
    insert into tb(a,b) values(3,1)
    goif object_id('pubs..f_hb') is not null
       drop function f_hb
    go--创建一个合并的函数
    create function f_hb(@a int)
    returns varchar(8000)
    as
    begin
      declare @str varchar(8000)
      set @str = ''
      select @str = @str + ',' + cast(b as varchar) from tb where a = @a 
      set @str = right(@str , len(@str) - 1)
      return(@str)
    End
    go--调用自定义函数得到结果:
    select distinct a ,dbo.f_hb(a) as b from tbdrop table tb--结果
    a           b     
    ----------- ------
    1           1,2,3
    2           1,2
    3           1(所影响的行数为 3 行)
    多个前列的合并
    数据的原始状态如下:
    ID  PR   CON  OP    SC 
    001 p    c    差    6
    001 p    c    好    2
    001 p    c    一般  4
    002 w    e    差    8
    002 w    e    好    7
    002 w    e    一般  1
    ===========================
    用SQL语句实现,变成如下的数据
    ID  PR   CON  OPS
    001 p    c    差(6),好(2),一般(4)
    002 w    e    差(8),好(7),一般(1)if object_id('pubs..tb') is not null
       drop table tb
    gocreate table tb
    (
    id varchar(10),
    pr varchar(10),
    con varchar(10),
    op varchar(10),
    sc int
    )
     
    insert into tb(ID,PR,CON,OP,SC) values('001', 'p',    'c',    '差',    6)
    insert into tb(ID,PR,CON,OP,SC) values('001', 'p',    'c',    '好',    2)
    insert into tb(ID,PR,CON,OP,SC) values('001', 'p',    'c',    '一般',  4)
    insert into tb(ID,PR,CON,OP,SC) values('002', 'w',    'e',    '差',    8)
    insert into tb(ID,PR,CON,OP,SC) values('002', 'w',    'e',    '好',    7)
    insert into tb(ID,PR,CON,OP,SC) values('002', 'w',    'e',    '一般',  1)
    goif object_id('pubs..test') is not null
       drop table test
    go
    select ID,PR,CON , OPS = op + '(' + cast(sc as varchar(10)) + ')' into test from tb--创建一个合并的函数
    if object_id('pubs..f_hb') is not null
       drop function f_hb
    go
    create function f_hb(@id varchar(10),@pr varchar(10),@con varchar(10))
    returns varchar(8000)
    as
    begin
      declare @str varchar(8000)
      set @str = ''
      select @str = @str + ',' + cast(OPS as varchar) from test where id = @id and @pr = pr and @con = con
      set @str = right(@str , len(@str) - 1)
      return(@str)
    End
    go--调用自定义函数得到结果:
    select distinct id ,pr , con , dbo.f_hb(id,pr,con) as OPS from testdrop table tb
    drop table test--结果
    id         pr         con        OPS                
    ---------- ---------- ---------- -------------------
    001        p          c          差(6),好(2),一般(4)
    002        w          e          差(8),好(7),一般(1)(所影响的行数为 2 行)create table b
    (col varchar(20))insert b values ('a')
    insert b values ('b')
    insert b values ('c')
    insert b values ('d')
    insert b values ('e')
    declare @sql varchar(1024)
    set @sql=''
    select @sql=@sql+b.col+',' from (select col from b) as b
    set @sql='select '''+@sql+''''
    exec(@sql)
      

  2.   

    group_number synch_Experimentguid course_name
    0               4                 语文1
    0               3                 计算机
    0               1                 物理
    1               3                 计算机
    1               4                 语文1
    2               3                 计算机
    2               1                 物理
    3               3                 计算机
    4               1                  物理
    5               4                 语文1需要如下结果
    group_number synch_Experimentguid course_name
    0             4,3,1               语文1 ,计算机,物理
    1             3,4                 计算机,语文1
    2             3,1                 计算机,物理
    3             3                   计算机
    4             1                   物理
    5             4                   语文1
      

  3.   

    create table tb(group_number int,synch_Experimentguid int, course_name varchar(10))
    insert into tb values(0,              4,                    '语文1')
    insert into tb values(0,              3,                    '计算机')
    insert into tb values(0,              1,                    '物理')
    insert into tb values(1,              3,                    '计算机')
    insert into tb values(1,              4,                    '语文1')
    insert into tb values(2,              3,                    '计算机')
    insert into tb values(2,              1,                    '物理')
    insert into tb values(3,              3,                    '计算机')
    insert into tb values(4,              1,                    '物理')
    insert into tb values(5,              4,                    '语文1')
    go--创建一个合并的函数
    create function f_hb(@group_number int)
    returns varchar(8000)
    as
    begin
      declare @str varchar(8000)
      set @str = ''
      select @str = @str + ',' + cast(synch_Experimentguid as varchar) from tb where group_number = @group_number
      set @str = right(@str , len(@str) - 1)
      return(@str)
    End
    go
    --创建一个合并的函数
    create function f_hb2(@group_number int)
    returns varchar(8000)
    as
    begin
      declare @str varchar(8000)
      set @str = ''
      select @str = @str + ',' + cast(course_name as varchar) from tb where group_number = @group_number
      set @str = right(@str , len(@str) - 1)
      return(@str)
    End
    go
    --调用自定义函数得到结果:
    select distinct group_number ,dbo.f_hb(group_number) synch_Experimentguid,dbo.f_hb2(group_number)  course_name from tbdrop table tb
    drop function f_hb,f_hb2
      

  4.   

    group_number synch_Experimentguid course_name
    ------------ -------------------- -----------
    0            4,3,1                语文1,计算机,物理
    1            3,4                  计算机,语文1
    2            3,1                  计算机,物理
    3            3                    计算机
    4            1                    物理
    5            4                    语文1(所影响的行数为 6 行)
      

  5.   

    还有个问题
    create table tb(group_number int,synch_Experimentguid int, course_name varchar(10))
    insert into tb values(0, 4, '语文1')
    insert into tb values(0, 3, '计算机')
    insert into tb values(0, 1, '物理')
    insert into tb values(1, 3, '计算机')
    insert into tb values(1, 4, '语文1')
    insert into tb values(2, 3, '计算机')
    insert into tb values(2, 1, '物理')
    insert into tb values(3, 3, '计算机')
    insert into tb values(4, 1, '物理')
    insert into tb values(5, 4, '语文1')
    go
    并不是他的全部数据
    里面还有字段 LabGuid 和 course_newGuid
    我是在查询出来下面的结果以后 进行的分组统计的select * from dbo.V_lab_SelExper
    where 
    LabGuid='71802183-7767-4fe5-be5f-7aac012d51e1' 
    and 
    course_newGuid='e553010a-01a9-4dc2-9bea-a215f38a3fe2'
    你告诉我的方法我试了 ,没有通过
    有没有其他的办法?
    谢谢你
      

  6.   

    select * from dbo.V_lab_SelExper
    where 
    LabGuid='71802183-7767-4fe5-be5f-7aac012d51e1' 
    and 
    course_newGuid='e553010a-01a9-4dc2-9bea-a215f38a3fe2'
    产生一个表
    有如下字段 
    roup_number synch_Experimentguid course_name LabGuid   course_newGuid