select name,sum(case subject when '数学' then source else 0 end) as '数学',
sum(case subject when '英语' then source else 0 end) as '英语',
sum(case subject when '语文' then source else 0 end) as '语文'
from test
group by name
--用于:交叉表的列数是不确定的
declare @sql varchar(8000)
set @sql = 'select name,'
select @sql = @sql + 'sum(case subject when '''+a.subject+'''
then source else 0 end) as '''+a.subject+''','
from (select distinct subject from student1) as a
print(@sql)
print('------------------------------------------------------------------------------')
select @sql = left(@sql,len(@sql)-1) + ' from student1 group by name'
print(@sql)
exec(@sql)
go
------------------------------------------------------
--可以
declare @sql varchar(8000)
set @sql = 'select name,'
select @sql = @sql + 'sum(case subject when '''+subject+'''
then source else 0 end) as '''+subject+''','
from (select distinct subject from student1) as a
print(@sql)
print('------------------------------------------------------------------------------')
select @sql = left(@sql,len(@sql)-1) + ' from student1 group by name'
print(@sql)
exec(@sql)
go
打印信息:
select name,sum(case subject when '数学'
then source else 0 end) as '数学',sum(case subject when '英语'
then source else 0 end) as '英语',sum(case subject when '语文'
then source else 0 end) as '语文',
------------------------------------------------------------------------------
select name,sum(case subject when '数学'
then source else 0 end) as '数学',sum(case subject when '英语'
then source else 0 end) as '英语',sum(case subject when '语文'
then source else 0 end) as '语文' from student1 group by name
4.如何生成以下的报表
如果在程序,页面生成就方便,如果用SQL查出为就应该怎样写SQL语句???