有表tab
部门  专业  金额
a     a1    1
a     a2    2
a     a1    3
b     a1    4
b     a2    5按如下统计格式显示:
   a1    a2    
a  4     2
b  4     5这样的sql怎么写?

解决方案 »

  1.   

    declare @sql varchar(8000)
    set @sql=''
    select 
       @sql=@sql+',sum(case 专业  when '''+专业 +''' then 金额 else 0 end) as ['+专业+']'
    from 
       tab
    group by 
       专业exec('select 部门'+@sql+' from tab group by 部门')
      

  2.   

    select sum(case when 专业=a1 then 金额 else 0 end),sum(case when 专业=a2 then 金额 else 0 end) from table 
    group by 部门
      

  3.   

    属于交叉表的范围:给你一个例子:
    declare @sql varchar(8000) 
    select @sql = '' 
    select @sql = @sql + ','+kemu+'=sum(case kemu when '''+kemu+''' then  else 0 end)' 
    from #stud 
    group by kemu exec('select studentname '+@sql+' from #stud group by studentname')
    [11:08:06] Chingli明空曌 说: create table #stud ( 
    studentID int, 
    studentName varchar(50), 
    kemu  varchar(20), 
     int ) 
    insert into #stud values(1001,'xiaowang','net',84) 
    insert into #stud values(1002,'xiaoli','net',80) 
    insert into #stud values(1003,'xiaoliu','net',86) insert into #stud values(1001,'xiaowang','sql',84) 
    insert into #stud values(1002,'xiaoli','sql',80) 
    insert into #stud values(1003,'xiaoliu','sql',86) insert into #stud values(1001,'xiaowang','xml',84) 
    insert into #stud values(1002,'xiaoli','xml',80) 
    insert into #stud values(1003,'xiaoliu','xml',86)
      

  4.   

    专业不止这么多,这里只是列出了2种a1,a2,可能还有其他的
    这sql怎么写啊?
      

  5.   

    select 部门 ,sum(case when 专业='a1' then 金额 else 0 end) as a1 ,
            sum(case when 专业='a2' then 金额 else 0 end) as a2
    from tab
    group 部门 没测试~~~~~~`
      

  6.   

    declare @sql varchar(8000) 
    select @sql = '' 
    select @sql = @sql + ','+a1+'=sum(case 专业 when '''+[专业]+''' then [金额] else 0 end)' 
    from tab exec  'select 部门,'+ @sql+ 'group by 部门' 
    没测试~~~~~~~~~
      

  7.   

    动态语句
    /*引用*/
    希望给楼主有启发
    1.包含两个表------典型行列转换问题例子 
    --建立测试环境
    create table tb1 (id nvarchar(10),type nvarchar(10))
    insert into tb1 select '11','a' union all select '22','b' union all select '33','c'
    create table tb2 (n int,type nvarchar(10),num int)
    insert into tb2 select '1','11','4' union all select '1','11','5' 
    union all select '2','22','8' union all select '3','22','5'
    --查询处理
    DECLARE @SQL VARCHAR(8000)
    SET @SQL='select n '
    SELECT @SQL= @SQL+',sum(case when type='+ttt+' then num else 0 end)['+tt+']' from
    (select distinct a.type as tt,isnull(b.type,'0') as ttt from tb2 b right join tb1 a on a.id=b.type) b
    set @sql=@sql+' from tb2 group by n'
    print @sql
    exec(@sql)
    go--删除测试环境
    Drop Table tb1,tb2