日期:2014-05-17  浏览次数:21111 次

ORACLE数据统计问题~~请教高手啦
本帖最后由 zhengfu 于 2013-02-22 15:53:33 编辑
    ZYBH  ZYMC   BH    MC    BH2    MC2    BH3  MC3     BZ(补助)
    0001  值班    101   张三    102   李四     103   王五     100
     0002  参加扫雪 102  李四    103   王五     空      空       50

    像上面这样的记录,我想得到下面这样的记录,怎么样做到呢,有时候人员编号和名称可以是空值。
      BH   MC   BZ(补助)
     101  张三  100
     102  李四  150
     103  王五  150

     我想统计成这样的记录,咋么才能做到呢?

------解决方案--------------------
select 
    bh
   ,mc
   ,sum(bz) 
  from (
select bh,mc,bz from table union
select bh2,mc2,bz from table union
select bh3,mc3,bz from table
    )
group by 
   bh
  ,mc
------解决方案--------------------
首先必须把三列通过union all合并为一列,剩下的就好办了。sql语句如下所示:
--sql语句
SELECT d.bh,d.mc,SUM(d.bz) "BZ(补助)" FROM 
(SELECT t.bh bh, t.mc mc,t.bz bz FROM test_a t
UNION ALL
SELECT t.bh2 bh, t.mc2 mc,t.bz bz FROM test_a t 
UNION ALL
SELECT t.bh3 bh, t.mc3 mc,t.bz bz FROM test_a t) d
WHERE d.bh IS NOT NULL
GROUP BY d.bh,d.mc
ORDER BY d.bh