如题,我用UNION语句做了张交叉表视图,现在想将此临时视图转为固定表该怎么写--测试数据
--带横向纵向合计的交叉表
if object_id('test') is not null drop table test
go
select '张三' as [name], '语文' as subject, 60 as Source
into test
union select '李四', '数学', 70
union select '王五', '英语', 80
union select '王五', '数学', 75
union select '王五', '语文', 57
union select '李四', '语文', 80
union select '张三', '英语', 100
go--我的代码declare @sql varchar(8000)
set @sql = 'select name as 姓名, '
select @sql = @sql + 'sum(case subject when ''' + subject+ ''' then source else 0 end) as '''+subject+''','
from (select distinct subject from test) as a
set @sql = @sql + ' sum(source) as 小计 from test group by name '
    + 'union select ''合计'', '
select @sql = @sql + 'sum(case subject when ''' + subject+ ''' then source else 0 end),'
from (select distinct subject from test) as a
set @sql = @sql + ' sum(source) as 合计 from test order by name desc'exec(@sql)--执行结果
/*
姓名    数学    英语    语文     小计
张三010060160
王五758057212
李四70080150
合计145180197522
*/
godrop table Test
谢谢!

解决方案 »

  1.   

    --测试数据
    --带横向纵向合计的交叉表
    if object_id('test') is not null drop table test
    go
    select '张三' as [name], '语文' as subject, 60 as Source
    into test
    union select '李四', '数学', 70
    union select '王五', '英语', 80
    union select '王五', '数学', 75
    union select '王五', '语文', 57
    union select '李四', '语文', 80
    union select '张三', '英语', 100
    go--我的代码declare @sql varchar(8000)
    set @sql = 'select name as 姓名, '
    select @sql = @sql + 'sum(case subject when ''' + subject+ ''' then source else 0 end) as '''+subject+''','
    from (select distinct subject from test) as a
    set @sql = @sql + ' sum(source) as 小计 into yy from test group by name '
        + 'union select ''合计'', '
    select @sql = @sql + 'sum(case subject when ''' + subject+ ''' then source else 0 end),'
    from (select distinct subject from test) as a
    set @sql = @sql + ' sum(source) as 合计 from test order by name desc'
    exec(@sql)select * from yy
    --是这个意思吗?
      

  2.   

    declare @sql varchar(8000)
    set @sql = 'select name as 姓名, '
    select @sql = @sql + 'sum(case subject when ''' + subject+ ''' then source else 0 end) as '''+subject+''','
    from (select distinct subject from test) as a
    set @sql = @sql + ' sum(source) as 小计 from test group by name '
        + 'union select ''合计'', '
    select @sql = @sql + 'sum(case subject when ''' + subject+ ''' then source else 0 end),'
    from (select distinct subject from test) as a
    set @sql = @sql + ' sum(source) as 合计 from test 'exec('
    select * into 表
    from ( '+@sql+') T
    order by T.姓名 desc
    ')--查看
    select * from 表
      

  3.   

    我+了下列语句出错
    exec('select * into 表 from '+@sql+ 'as t'出错代码:服务器: 消息 170,级别 15,状态 1,行 20
    第 20 行: 'as t' 附近有语法错误。
      

  4.   

    我+了下列语句出错
    exec('select * into 表 from '+@sql+ 'as t'出错代码:服务器: 消息 170,级别 15,状态 1,行 20
    第 20 行: 'as t' 附近有语法错误。
    ------------------------------------------------------
    肯定不能这样啦,@sql相当于是一个子查询,子查询这样写肯定是不对的一般来说,只能类似这样 Select * from (select * from 表名) a