举例:
Create table test (name char(10),km char(10),cj int)
go
insert test values('张三','语文',80)
insert test values('张三','数学',86)
insert test values('张三','英语',75)
insert test values('李四','语文',78)
insert test values('李四','数学',85)
insert test values('李四','英语',78)
想得到:
姓名   语文   数学   英语
张三   80     86     75
李四   78     85     78declare @sql varchar(8000)
set @sql = 'select name'
select @sql = @sql + ',sum(case km when '''+km+''' then cj end) ['+km+']'
 from (select distinct km from test) as a
select @sql = @sql+' from test group by name'
exec(@sql)--drop table test

解决方案 »

  1.   


    1,建自定义函数
    Create function getstr(@id Nchar(100))
    returns Nvarchar(4000)
    as 
    begin
    declare @str Nvarchar(4000),@分隔符 Nvarchar(10)
    set @分隔符=N','
    set @str=N''
    select @str=@str+rtrim(Col)+@分隔符 from 表名
    --------------------------------^^^^要相加的字段名
    where 相加条件字段=@id
    set @str=left(@str,len(@str)-1)落 ---却除最后一个分隔符
    return @str
    end
    GO2,调用
    select 条件字段,dbo.getstr(条件字段) from 表名 group by 条件字段
      

  2.   

    Create table test (name char(10),km char(10))
    go
    insert test values('张三','语文')
    insert test values('张三','数学')
    insert test values('张三','英语')
    insert test values('李四','语文')
    insert test values('李四','数学')
    insert test values('李四','英语')
    go
    create function getstr(@content int)
    returns varchar(2000)
    as 
    begin
    declare @str varchar(2000)
    set @str=''
    select @str=@str+','+rtrim(km) from test where name=@content
    select @str=right(@str,len(@str)-1)
    return @str
    end
    go--调用:
    select name,dbo.getstr(name) km  from test group by name
      

  3.   

    但是同一个producnt不止出现一次
    insert test values('张三','语文',80)
    insert test values('张三','数学',86)
    insert test values('张三','英语',75)
    insert test values('张三','语文',80)
    insert test values('张三','数学',86)
    insert test values('张三','英语',75)
    insert test values('李四','语文',78)
    insert test values('李四','数学',85)
    insert test values('李四','英语',78)
    可能会向上面那样,而且有些customerno的 product也许只有一个,有些会很多
      

  4.   

    典型的交叉表.如果生成的横向字段过多,可能导致生成的SQL语句被截断.这种情况可以参考下面的贴子处理:http://expert.csdn.net/Expert/topic/2303/2303308.xml?temp=.8472406
    化解字符串不能超过8000的方法(zjcxc)
      

  5.   

    我用的是sql 7.0不能create function,有没有更好的方法啊