行列转换
成功案例:
假设有张学生成绩表(CJ)如下
Name    Subject     Result
张三    语文        80
张三    数学        90
张三    物理        85
李四    语文        85
李四    数学        92
李四    物理        82想变成    
姓名   语文   数学   物理
张三   80     90     85
李四   85     92     82用一下语句可成功转换:
declare @sql varchar(4000)
set @sql = 'select Name'
select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result end) ['+Subject+']'
from (select distinct Subject from CJ) as a
select @sql = @sql+' from CJ group by name'
exec(@sql)问题:
现在的情况是这样:有两张表,表1跟上面的表一样:
表1:学生成绩表(CJ)
Name    Subject     Result
张三    语文        80
张三    数学        90
张三    物理        85
李四    语文        85
李四    数学        92
李四    物理        82表2:学生信息表(xx)
name  nation
张三   汉族
李四   黎族如何才能变成如下表:姓名   语文   数学   物理   nation
张三   80     90     85     汉族
李四   85     92     82     黎族
能实现这样的联合查询吗??恳请高手赐教!

解决方案 »

  1.   

    姓名   语文   数学   物理   nation
    张三   80     90     85     汉族
    李四   85     92     82     黎族
    -------------------------
    這個結果不就是"行轉列"出來的結果,去join 表2 嗎?
      

  2.   

    exec('select * from ('+@sql+') A inner join 表2 B on A.name=B.name')
      

  3.   

    ls说的是阿,
    也许lz是要一步实现是么?
      

  4.   

    --试试
    declare @sql varchar(4000)
    set @sql = 'select a.Name'
    select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result end) ['+Subject+']'
    from (select distinct Subject from CJ) as a
    select @sql = @sql+',nation from CJ a,xx b where a.name = b.name  group by a.name,b.nation'
    exec(@sql)
      

  5.   

    declare @sql varchar(4000)
    set @sql = 'select CJ.Name,xx.nation'
    select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result end) ['+Subject+']'
    from (select distinct Subject from CJ) as a
    select @sql = @sql+' from CJ left join xx on CJ.Name=xx.name group by  CJ.Name, xx.nation'
    exec(@sql)
      

  6.   

    create table CJ(Name nvarchar(10), Subject nvarchar(10), Result int)
    insert CJ select '张三',    '语文',        80
    union all select '张三',    '数学',        90
    union all select '张三',    '物理',        85
    union all select '李四',    '语文',        85
    union all select '李四',    '数学',        92
    union all select '李四',    '物理',        82
    create table xx(name nvarchar(10), nation nvarchar(10))
    insert xx select '张三',   '汉族'
    union all select '李四',   '黎族'declare @sql varchar(4000)
    set @sql = 'select CJ.Name,xx.nation'
    select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result end) ['+Subject+']'
    from (select distinct Subject from CJ) as a
    select @sql = @sql+' from CJ left join xx on CJ.Name=xx.name group by  CJ.Name, xx.nation'
    exec(@sql)--result
    Name       nation     数学          物理          语文          
    ---------- ---------- ----------- ----------- ----------- 
    张三         汉族         90          85          80
    李四         黎族         92          82          85
      

  7.   

    --抢分拉!create table cj
    (
    name varchar(10),
    subject varchar(10),
    result int
    )create table xx
    (
    name varchar(10),
    nation varchar(10)
    )insert into cj select '张三',    '语文',        80
    insert into cj select '张三',    '数学',        90
    insert into cj select '张三',    '物理',        85
    insert into cj select '李四',    '语文',        85
    insert into cj select '李四',    '数学',        92
    insert into cj select '李四',    '物理',        82insert into xx select '张三',   '汉族'
    insert into xx select '李四',   '黎族'--语句
    declare @sql varchar(4000)
    set @sql = 'select a.Name'
    select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result end) ['+Subject+']'
    from (select distinct Subject from CJ) as a
    select @sql = @sql+',nation from CJ a,xx b where a.name = b.name  group by a.name,b.nation'
    exec(@sql)--结果
    张三 90 85 80 汉族
    李四 92 82 85 黎族