/****** SQLserver 写法 ******/ SELECT * FROM [lx].[dbo].[全国销售额] where province='北京' --group by [province],[name] --按销售额排序 取每个省的前4名,剩下的为其他 select * from ( select a.province,a.name ,a.value from 全国销售额 a where value in (select top 4 value from 全国销售额 where province=a.province order by value desc) union all select a.province,'其他',sum(a.value) value from 全国销售额 a where value not in (select top 4 value from 全国销售额 where province=a.province order by value desc) group by a.province ) a order by a.province,a.value desc
--oracle 写法(大于5的列到其他)
SELECT a.bm,'其他' mdd ,a.jssj,sum(b.jp) jp,sum(b.hc) hc ,sum(b.bzfy) bzfy,sum(b.zsfy) zsfy,sum(b.jtqt) jtqt,sum(b.qt) qt,sum(b.jtgj) jtgj, sum(b.bmj) bmj,sum(b.ygj) ygj ,sum(b.gsj) gsj,sum(b.zjj) zjj,sum(b.ccts) ccts ,sum(b.shje) shje FROM ( SELECT a.bm,a.mdd,a.jssj,jtgj, ROW_NUMBER() OVER(PARTITION BY a.bm,a.jssj ORDER BY jtgj desc) AS RN FROM NSC_OA_CLHZ a ) a left join NSC_OA_CLHZ b on nvl(a.bm,0) = nvl(b.bm,0) and nvl(a.mdd,0) = nvl(b.mdd,0) and nvl(a.jssj,0)=nvl(b.jssj,0) and a.RN >5 group by a.bm,a.jssj