create table A(
科目 varchar(50),
分数 int,
姓名编号 varchar(50)
)
go 
insert A select '数学',50,'001'
union select '化学',90,'001'
union select '英语',40,'001'
union select '语文',20,'001'
union select '物理',80,'001'
union select '化学',90,'002'
union select '英语',40,'002'
union select '语文',20,'002'
union select '物理',80,'002'
DECLARE @SQL varchar(8000)
set @SQL=''
select @SQL=@SQL + ' sum(case when 科目=''' + 科目 + ''' then 分数 else 0 end) as ' + 科目 +','  from (select distinct 科目 from A) T
set @SQL='select 姓名编号,' + left(@SQL,len(@SQL)-1) + ' from a group by 姓名编号'
exec (@SQL)

解决方案 »

  1.   

    create table A(
    科目 varchar(50),
    分数 int,
    姓名编号 varchar(50)
    )
    go
    create table B(
    姓名编号 varchar(800),
    姓名  varchar(80)
    )
    go
    insert B select '001','A'
    union select '002','B'
    go 
    insert A select '数学',50,'001'
    union select '化学',90,'001'
    union select '英语',40,'001'
    union select '语文',20,'001'
    union select '物理',80,'001'
    union select '化学',90,'002'
    union select '英语',40,'002'
    union select '语文',20,'002'
    union select '物理',80,'002'
    DECLARE @SQL varchar(8000)
    set @SQL=''
    select @SQL=@SQL + ' sum(case when 科目=''' + 科目 + ''' then 分数 else 0 end) as ' + 科目 +','  from (select distinct 科目 from A) T
    set @SQL='select B.姓名 ,t.* from B left join (select 姓名编号,' + left(@SQL,len(@SQL)-1) + ' from a group by 姓名编号)t on b.姓名编号=t.姓名编号'
    exec (@SQL)
      

  2.   

    大哥!我要用一个条语句就好,我用的是ACCESS数据库
      

  3.   

    select  表1.姓名,表2.科目,表2.分数 from 表1 inner join 表2
    on 表1.姓名编号=表2.姓名编号
      

  4.   

    select a.姓名,
    sum(case when b.科目='数学' then b.分数 else 0 end) as 数学,
    sum(case when b.科目='英语' then b.分数 else 0 end) as 英语
    from tb1 a inner join tb2 b on a.姓名编号=b.姓名编号 group by a.姓名
    已经测试,一切ok!
      

  5.   

    DECLARE @SQL varchar(8000)
    set @SQL=''
    select @SQL=@SQL + ' sum(case when 科目=''' + 科目 + ''' then 分数 else 0 end) as ' + 科目 +','  from (select distinct 科目 from A) T
    set @SQL='select 姓名编号,' + left(@SQL,len(@SQL)-1) + ' from a group by 姓名编号'