department      a                      b      c   总计
   一          1(类型为a的记录数)         0      1    2
   二          1                       0      0    1
   三          0                       0      1    1

解决方案 »

  1.   

    给你个例子,自己去写!
    /////////////////////一个统计动态列的例子///////////////
    --测试数据create table 表abcd (name varchar(20),sub varchar(20),grade int)
    insert 表abcd select '张三','语文',62
    union all select '李四','数学',73
    union all select '张三','数学',87
    union all select '王五','英语',69
    union all select '李四','英语',80create table 表efgh (name varchar(20),commissary varchar(10))
    insert 表efgh select '张三','yes'
    union all select '李四','no'
    union all select '王五','no'--查询处理1declare @sql varchar(8000)
    set @sql='select b.name'
    select  @sql = @sql + ',isnull((select grade from 表abcd c where c.name=b.name and c.sub='''+a.sub+''' ),'''') as ' + a.sub + ' '
    from (select distinct sub from [表abcd]) a
    set @sql=@sql+',总分=('+'case  e.commissary when '+'''yes'''+' then (select sum(grade)  from 表abcd d where d.name=b.name)+10 else (select sum(grade)  from 表abcd d where d.name=b.name) end)'
    set @sql=@sql+' from [表abcd] b  join 表efgh e on b.name=e.name group by b.name,e.commissary'
    print @sql
    exec (@sql)---查询处理2
    declare @sql varchar(8000)
    set @sql='select b.name'
    select  @sql = @sql + ',(select grade from 表abcd c where c.name=b.name and c.sub='''+a.sub+''' ) as ' + a.sub + ' '
    from (select distinct sub from [表abcd]) a
    set @sql=@sql+',总分='+'(select sum(grade)+max(case e.commissary when ''yes''then 10 else 0 end)  from 表abcd d join 表efgh e on d.name=e.name where d.name=b.name)'
    set @sql=@sql+' from [表abcd] b  group by b.name '
    print @sql
    exec (@sql)--结果name     数学   英语   语文   总分
    李四      73     80    0     153
    王五      0      69    0     69
    张三      87     0     62    149
      

  2.   

    一个表为够了。select department,sum(case when type = 'a' then 1 else 0 end) as a,
    sum(case when type = 'b' then 1 else 0 end) as b,
    sum(case when type = 'c' then 1 else 0 end) as c,
    sum(1) as 总计
    from user
    group by department
      

  3.   

    马可老大的可以呀,
    若表A不固定就动态生成SQL语句吧