表结构
N_ID     V_KHMC    V_SJR    V_KWID   N_FS
1                a单位        张三        a刊物         1
2                a单位        张三        b刊物         2
3                a单位                        a刊物         3
4                b单位        李四        a刊物         1
5                b单位        李四        c刊物         2
6                b单位                        b刊物        1
....想得出统计表
            V_KHMC      V_SJR      a刊物     b刊物  c刊物
                a单位        张三                1          2
                a单位                                3
                b单位        李四                1                       2
                b单位                                            1求大神给个sql

解决方案 »

  1.   

     a刊物     b刊物  c刊物是固定的这三个吗 ? 还是有更多个?
      

  2.   

    select V_KHMC,
           V_SJR,
           max(case when V_KWID='a刊物' then N_FS end) a刊物,
           max(case when V_KWID='b刊物' then N_FS end) b刊物,
           max(case when V_KWID='c刊物' then N_FS end) c刊物
    from tab
    group by V_KHMC,V_SJR;
      

  3.   

    select t.v_khmc,t.v_sjr,
    (sum(case t.v_kwid when 'a刊物' then t.n_fs else null end)) a刊物 ,
    (sum(case t.v_kwid when 'b刊物' then t.n_fs else null end)) b刊物 ,
    (sum(case t.v_kwid when 'c刊物' then t.n_fs else null end)) b刊物 ,
    from table1 t 
    group by t.v_khmc,t.v_sjr
    order by t.v_khmc
    试试看
      

  4.   


    大神,如果V_KWID是从另一个表维护的数据,动态的V_KWID怎么写呢
      

  5.   

    如果值不是太多,比较直观的办法是
    把所有值CASE WHEN一遍
      

  6.   

    select * from t_test pivot(sum(n_fs) sumsal/*, avg(salary) avgsal */for(V_kwid) in ( 'a刊物','b刊物','c刊物'));