看了你们些关于行列转换的帖子,大概懂了一点
就是假设有张学生成绩表(CJ)如下
Name       Subject       Result
张三       语文             80
张三       数学             90
张三       物理             85
李四       语文             85
李四       数学             92
李四       物理             82
想变成      
姓名       语文       数学       物理
张三       80             90           85
李四       85             92           82 的例子     用exec(@sql)来实现的
但是现在我要求用查询出来的结果和另外一张表b内联显示出来,请问怎么做?
也就是
姓名       语文       数学       物理
张三       80             90           85
李四       85             92           82 
和号码           姓名
1              张三
2              李四
内联起来得出
姓名       语文       数学       物理                号码
张三       80             90           85             1
李四       85             92           82             2

解决方案 »

  1.   

    exec('select .....'+@sql+' from a join b on a.姓名=b.姓名')
      

  2.   

    不好意思,麻烦写全一点呢,在.....应该写什么呢,我试着写了几个进去,都不能成功运行呢
    wzy_love_sly
      

  3.   

    declare @sql varchar(8000)
    set @sql='select name[姓名]'
    select @sql=@sql+','+subject+'=max(case subject when '''+subject+''' then result else 0 end)'
    from (select distinct subject from cj)a
    exec(@sql+',号码 from cj,b where a.name=b.姓名 group by name,号码')
      

  4.   

    drop table tba
    drop table tbb
    go
    create table tba(姓名 varchar(10),语文 int,数学 int,物理 int)
    insert into tba select '张三',80,90,85
    insert into tba select '李四',85,92,82
    go
    create table tbb(号码 int,姓名 varchar(10))
    insert into tbb select 1,'张三'
    insert into tbb select 2,'李四'
    go
    select a.*,b.号码 from tba a inner join tbb b
    on a.姓名=b.姓名张三 80 90 85 1
    李四 85 92 82 2
      

  5.   

    恩,我刚把pt的输入进去,
    结果显示
    服务器: 消息 107,级别 16,状态 3,行 1
    列前缀 'a' 与查询中所用的表名或别名不匹配。
    服务器: 消息 107,级别 16,状态 1,行 1
    列前缀 'a' 与查询中所用的表名或别名不匹配。
    服务器: 消息 107,级别 16,状态 1,行 1
    列前缀 'a' 与查询中所用的表名或别名不匹配。
      

  6.   


    declare @sql varchar(8000)
    set @sql='select a.haoma,b.name'
    select @sql=@sql+',sum(case subject when '''+ subject +''' then result else 0 end ) as ' + subject
    from (select distinct subject from cj) a
    set @sql = @sql + ' from cj b inner join haomabiao a on a.xingming=b.name group by a.haoma,b.name'
    exec(@sql)
      

  7.   


    declare @sql varchar(8000)
    set @sql='select name[姓名]'
    select @sql=@sql+','+subject+'=max(case subject when '''+subject+''' then result else 0 end)'
    from (select distinct subject from cj)a
    exec(@sql+',号码 from cj a,b where a.name=b.姓名 group by name,号码')--看错了。表别名掉了一个
      

  8.   

    wzy_love_sly
    我是需要从那个转换开始的呢,也就是说怎么把转换后的结果放到你的那个
    tba表中间去,
    不能按你显示的那样,固定把那些成绩插进去呢,假如成绩变了呢,我需要根据查询出来的结果去内联
      

  9.   

    参考..学生表 student   
    sid  Name 
    1    li 
    2    zhang 
    3    wang 课程表 course 
    cid    Name 
    1   数学 
    2   英语 
    3   计算机 成绩表 pid sid Grade 
    1     1   90 
    3     2   78 
    1     3   60 
    2     2   76 
    2     1   80 
    3     1   59 
    3     3   83 
    2     3   46 
    1     2   90 
    想生成一个表 
    学生  数学  英语  计算机 
    li    90   90   60 
    zhang 80   76   46 
    wang  59   78   83 
    --静态
    select 学生= a.name,
      数学 = sum(case when c.name = '数学' then b.grade else 0 end),
      英语 = sum(case when c.name = '英语' then b.grade else 0 end),
      计算机 = sum(case when c.name = '计算机' then b.grade else 0 end)from student a,成绩表 b, course c
    where a.sid = c.sid and b.cid = c.pid
    group by a.name
    --动态
    declare @sql varchar(8000)
    set @sql='select a.name as 学生'
    select @sql=',max(case when b.name='''+name+''' then c.grade end) as ['+name+']'
    from 成绩表 group by nameexec (@sql+' from student a,成绩表 b,course c where a.sid=c.sid and b.cid=c.pid group by a.name')
      

  10.   

    是想把xec(@sql)产生的表再连下号码           姓名
    1              张三
    2              李四
    这个表吧?
      

  11.   

    wzy_love_sly
    恩,我就是那意思
      

  12.   

    declare @sql varchar(8000)
    set @sql='select a.name as 学生'
    select @sql=',max(case when b.name='''+name+''' then c.grade end) as ['+name+']'
    from 成绩表 group by nameexec ('select * from 号码表 tp1 inner join ('+@sql+' from student a,成绩表 b,course c where a.sid=c.sid and b.cid=c.pid group by a.name)tp2 on tp1.姓名=tp2.姓名')这样的