注意: oracle .sql 查询中 用<> 或者 !=null ,也顺便过滤掉了该字段中所有为null的值。
介绍一种行转列,常见的案例 统计各个公司 各个发票的数量,妙用sum函数,用sum 函数做累计, 如果统计每家公司每种类型的发票量,
通常 按照 按照公司编号,发票类型来分组,但是这样就会出现一家的统计数据在3行,这时就要用到行转列;
SELECT xhdwmc, xhdwdm, sum(case when FPLXDM='004' then 1 ELSE 0 end ) zp, sum(case when FPLXDM='007' then 1 ELSE 0 end ) pp, sum(case when FPLXDM='026' then 1 ELSE 0 end ) dp FROM bw_fpzxx WHERE TRUNC(kprq) = TRUNC(SYSDATE) AND LYBZ != '08' AND XHDWDM != '11010120181019084' And FPLXDM in('004','007','026') GROUP BY xhdwdm, xhdwmc ORDER BY xhdwdm
Oracle中按连续号码分段
oracle 连续号码分段,我们如何分组:
select min(t.fphm),max(t.fphm) ,count(1), (max(t.fphm)-min(t.fphm)+1) from (select fphm, (fphm-rownum) as tnum from bw_fpzxx s where s.XHDWDM='91310101132208081P' and s.fplxdm='026' and s.kprq >= TO_DATE ( '2019-07-01', 'yyyy-mm-dd hh24:mi:ss' ) AND s.kprq <= TO_DATE ( '2019-07-31 23:59:59', 'yyyy-mm-dd hh24:mi:ss' ) order by fphm ) t group by t.tnum