//将几张不同表结构的数据全部合并在一起,使用了case、union,同时实现小计总计
//小计总计使用的 GROUP BY ROLLUP函数,GROUP BY ROLLUP使用双括号将字段括起来,是将这些字段分为一组,只会产生一个总计
select case when t_all.temp_comm is null then '总计' else t_all.temp_comm end as temp_comm,
commodity_name,guige,t_bi_commbaseinfo.comm_type_id,comm_type_name,t_all.temp_bill,t_all.temp_date,
sum(temp_inCount) as temp_inCount,temp_inPrice as temp_inPrice,
sum(temp_inCount*temp_inPrice) as temp_inTotal,
sum(temp_inCount*temp_inPrice*(1-temp_inTax)) as temp_inTatolTax,
sum(temp_inCount*temp_inTax*temp_inPrice) as temp_inTaxTatal,
sum(temp_outCount) as temp_outCount,temp_outPrice as temp_outPrice,
sum(temp_outCount*temp_outPrice) as temp_outTotal,
sum(temp_retailPrice*temp_inCount) as temp_inSaleTotal,
sum((temp_retailPrice-temp_inPrice)*temp_inCount) as temp_outDivInTotal,
sum(temp_inCount-temp_outCount) as temp_outDivIn,
sum(temp_inCount*temp_inPrice) as temp_divTotal
from ((SELECT receipt_num AS temp_bill,shd.commodity_id as temp_comm,sh.check_date AS temp_date,(CASE WHEN shd.order_real_inprice IS NOT NULL THEN shd.order_real_inprice ELSE 0 END) AS temp_inPrice,0 as temp_outPrice,(case when t_bi_commbaseinfo.retail_price is not null then t_bi_commbaseinfo.retail_price else 0 end) AS temp_retailPrice,(CASE WHEN shd.in_tax IS NOT NULL THEN shd.in_tax ELSE 0 END) AS temp_inTax,(case when shd.real_rece_count is not null then shd.real_rece_count else 0 end) as temp_inCount,0 as temp_outCountFROM t_bi_receivedetail AS shd LEFT JOIN t_bi_receive AS sh ON sh.receipt_id = shd.receipt_numLEFT JOIN t_bi_commbaseinfo on shd.commodity_id=t_bi_commbaseinfo.commodity_idWHERE sh.check_date BETWEEN '2015/7/1' AND '2016/12/10' AND receipt_status = '2')UNION(SELECT thd.return_com_receipt_num AS temp_bill,thd.commodity_id as temp_comm,th.check_date AS temp_date,0 AS temp_inPrice,(CASE WHEN thd.return_com_price IS NOT NULL THEN thd.return_com_price ELSE 0 END) AS temp_outPrice,(case when t_bi_commbaseinfo.retail_price is not null then t_bi_commbaseinfo.retail_price else 0 end) AS temp_retailPrice,0 AS temp_inTax,0 as temp_inCount,(case when thd.return_com_count is not null then return_com_count else 0 end) as temp_outCount  FROM t_bi_returncommdetail AS thd LEFT JOIN t_bi_returncomm AS th ON thd.return_com_receipt_num = th.return_com_receipt_numLEFT JOIN t_bi_commbaseinfo on thd.commodity_id=t_bi_commbaseinfo.commodity_idWHERE th.check_date BETWEEN '2015/6/1' AND '2016/12/10' AND th.status = '2')UNION(SELECT lyd.entertain_recei_num AS temp_bill,lyd.commodity_id as temp_comm,ly.check_date AS temp_date,0 as temp_inPrice,(case when t_bi_commbaseinfo.retail_price is not null then t_bi_commbaseinfo.retail_price else 0 end) AS temp_retailPrice,0 as temp_outPrice,0 as temp_inTax,0 as temp_inCount,0 as temp_outCountFROM t_bi_entaindetail AS lyd LEFT JOIN t_bi_entainment AS ly ON lyd.entertain_recei_num = ly.entertain_recei_numLEFT JOIN t_bi_commbaseinfo on lyd.commodity_id=t_bi_commbaseinfo.commodity_idWHERE ly.check_date BETWEEN '2015/6/1' AND '2016/12/10' AND ly.status IN ('2', '3'))UNION(SELECT bsd.break_rece_num AS temp_bill,bsd.commodity_id as temp_comm,bs.check_date AS temp_date,0 as temp_inPrice,0 as temp_outPrice,(case when t_bi_commbaseinfo.retail_price is not null then t_bi_commbaseinfo.retail_price else 0 end) AS temp_retailPrice,0 as temp_inTax,0 as temp_inCount,0 as temp_outCountFROM t_bi_breakdetail AS bsd LEFT JOIN t_bi_break AS bs ON bsd.break_rece_num = bs.break_rece_numLEFT JOIN t_bi_commbaseinfo on bsd.commodity_id=t_bi_commbaseinfo.commodity_idWHERE bs.check_date BETWEEN '2015/6/1' AND '2016/12/10' AND bs.status = '2')UNION(SELECT fcd.back_reciept_num AS temp_bill,fcd.commodity_id as temp_comm,fc.check_date AS temp_date,0 as temp_inPrice,0 as temp_outPrice,(case when t_bi_commbaseinfo.retail_price is not null then t_bi_commbaseinfo.retail_price else 0 end) AS temp_retailPrice,0 as temp_inTax,0 as temp_inCount,0 as temp_outCountFROM t_bi_returnwaredetail AS fcd LEFT JOIN t_bi_returnwarehose AS fc ON fcd.back_reciept_num = fc.back_reciept_numLEFT JOIN t_bi_commbaseinfo on fcd.commodity_id=t_bi_commbaseinfo.commodity_idWHERE fc.check_date BETWEEN '2015/6/1' AND '2016/12/10' AND fc.status IN ('2', '3', '4'))UNION(SELECT zdd.deliever_rece_num AS temp_bill,zdd.commodity_id as temp_comm,zd.check_date AS temp_date,0 as temp_inPrice,0 as temp_outPrice,(case when t_bi_commbaseinfo.retail_price is not null then t_bi_commbaseinfo.retail_price else 0 end) AS temp_retailPrice,0 as temp_inTax,0 as temp_inCount,0 as temp_outCountFROM t_bi_deliverdetail AS zdd LEFT JOIN t_bi_deliver AS zd ON zdd.deliever_rece_num = zd.deliever_rece_numLEFT JOIN t_bi_commbaseinfo on zdd.commodity_id=t_bi_commbaseinfo.commodity_idWHERE zd.check_date BETWEEN '2015/6/1' AND '2016/12/10' AND zd.status IN ('5', '3', '4'))UNION(SELECT tgd.group_reciept AS temp_bill,tgd.commodity_id as temp_comm,tg.check_date AS temp_date,0 as temp_inPrice,(case when tgd.groupbuy_price is not null then tgd.groupbuy_price else 0 end) as temp_outPrice,(case when t_bi_commbaseinfo.retail_price is not null then t_bi_commbaseinfo.retail_price else 0 end) AS temp_retailPrice, 0 as temp_inTax,0 as temp_inCount,(case when tgd.groupbuy_count is not null then tgd.groupbuy_count else 0 end) as temp_outCountFROM t_bi_hqgroupdetail AS tgd LEFT JOIN t_bi_hqgroup AS tg ON tgd.group_reciept = tg.group_recieptLEFT JOIN t_bi_commbaseinfo on tgd.commodity_id=t_bi_commbaseinfo.commodity_idWHERE tg.check_date BETWEEN '2015/6/1' AND '2016/12/10' AND tg.status IN ('2', '3', '4'))UNION(SELECT ttgd.group_return_reciept AS temp_bill,ttgd.commodity_id as temp_comm,ttg.check_date AS temp_date,(case when ttgd.groupbuy_price is not null then ttgd.groupbuy_price else 0 end) as temp_inPrice,(case when t_bi_commbaseinfo.retail_price is not null then t_bi_commbaseinfo.retail_price else 0 end) AS temp_retailPrice,0 as temp_outPrice,0 as temp_inTax,(case when ttgd.groupbuy_count is not null then ttgd.groupbuy_count else 0 end) as temp_inCount,0 as temp_outCountFROM t_bi_returnhqgroupdetail AS ttgd LEFT JOIN t_bi_returnhqgroup AS ttg ON ttg.group_return_reciept = ttgd.group_return_recieptLEFT JOIN t_bi_commbaseinfo on ttgd.commodity_id=t_bi_commbaseinfo.commodity_idWHERE ttg.check_date BETWEEN '2015/6/1' AND '2016/12/10' AND ttg.status IN ('2', '3', '4'))
) as t_all
LEFT JOIN t_bi_commbaseinfo on t_bi_commbaseinfo.commodity_id=t_all.temp_comm
LEFT JOIN t_bi_commtype on t_bi_commtype.comm_type_id=t_bi_commbaseinfo.comm_type_id
GROUP BY ROLLUP((t_all.temp_comm,commodity_name,guige,t_bi_commbaseinfo.comm_type_id,comm_type_name,t_all.temp_bill,t_all.temp_date,temp_inPrice,temp_outPrice))
order by temp_comm

postgre——case、union、小计总计(GROUP BY ROLLUP)写法相关推荐

  1. Excel·VBA选中列一键计算小计总计

    不同于<Excel·VBA一键计算每月合计>,仅对指定关键字计算合计数,而本文可以实现对选中列自动插入小计.总计行并求和 目录 连续相同关键值自动小计 举例 固定行数分段自动小计 连续相同 ...

  2. oracle rollup 小计,Oracle Group By 用法之 —— Rollup (小计功能)

    Oracle数据库中的rollup配合group by命令使用,可以提供信息汇总功能(与"小计"相似) 表B C1 c2 2005-01-01 1 2005-01-01 3 200 ...

  3. SAP小技巧之 实现SMARTFORM打印中的小计与总计

    点击蓝字 关注我们 一 前言 公众号群里面有人在讨论SMARTFORM打印中的小计和总计的实现.好久没有做SMARTFORM了, 所以没有参与讨论. 后来网上查询了一下. 也没有找到很好的解决方案.所 ...

  4. oralce rollup 小计合计_总计与小计–WITH ROLLUP

    rollup:汇总 在GROUP后加WITH ROLLUP来实现总计与小计,它会对每次分组的结果进行ROLLUP操作,产生汇总的结果,显示在行下. 在显示的时候可用GROUPING来判断当天是数据行还 ...

  5. 小计 合计 总计 共计 怎么解释?

    排列顺序:小计.总计.合计.共计分开使用. 小计:小计就是简单核算一下单个体,可理解为日小计 合计:合计就是把所有小计加起来,可理解为月合计 总计:总计就是把合计加起来,可理解为年总计 共计:一组数字 ...

  6. Oracle 中总计和小计使用的函数

    总计和小计.逐行累计求和 一.总计和小计使用函数 1.rollup 2.cube 3.grouping 4.grouping sets 5.grouping_id 二.逐行累计求和方法(OVER函数) ...

  7. 实战 SQL:销售数据的小计/合计/总计以及数据透视表

    文章目录 小计.合计与总计 多维度交叉统计 自定义统计维度 数据透视表 总结 学习过 SQL 的人都知道,使用聚合函数(AVG.SUM.COUNT.MIN/MAX 等)和分组操作(GROUP BY)可 ...

  8. sqlserver 小计合计总计

    SELECT CASE WHEN GROUPING(F1) = 1 THEN '总计' WHEN GROUPING(F1) = 0 AND GROUPING(F2) = 1 THEN  F1+'合计' ...

  9. sqlservere小计合计总计

    SELECT CASE WHEN GROUPING(F1) = 1 THEN '总计' WHEN GROUPING(F1) = 0 AND GROUPING(F2) = 1 THEN F1+'合计' ...

最新文章

  1. python三大神器之生成器
  2. 2.4 残差网络为什么有用-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
  3. vue学习之二ECMAScript6标准
  4. mysql too many connections_mysql too many connections 解决方法
  5. php支持 的编码,php编码转换函数(自动转换字符集支持数组转换)
  6. php创建一个类,JavaScript_创建一个类Person的简单实例,创建一个类Person,包含以下属 - phpStudy...
  7. BlockingQueue阻塞队列及其实现
  8. 游戏引擎渲染管线的总结
  9. [Python]通过有道词典API获取单词发音MP3
  10. 互联网运营常用8大数据分析模型
  11. Free Launch Bar
  12. 镭速传输流量版:随时开启企业大数据加速传输超能力
  13. 用python画路飞代码_python 全栈开发,Day105(路飞其他数据库表结构,立即结算需求)...
  14. python 换页符_python分页字符串
  15. Invalid argument during startup: Failed to open the .conf file: redis-window
  16. java file mac ox_MAC OX 配置JDK环境变量
  17. 射影几何----帕普斯定理和帕斯卡定理证明对比版
  18. ActiveReports报表开发案例:ERP等管理系统的开发与维护模式
  19. Rabbitmq 和erlang 安装成功但是网面访问不了
  20. mkv、rmvb、avi、MP4、flv、wmv特点和区别

热门文章

  1. 74HC165级联编程篇(四)
  2. Silverlight围棋单机版演示及源码(原创)
  3. 大数据分析-NBA球员分析-基于pandas、numpy等-期末大作业
  4. 收藏了很久的:5款电影网站!高清大片任意看!就没有找不到资源!
  5. [arduino]-准备
  6. 惠普HP LaserJet Pro 400 M401d 打印机驱动
  7. 浅谈Python两大爬虫库——urllib库和requests库区别
  8. python 立体匹配算法_OpenCV3.4两种立体匹配算法效果对比
  9. Python表白代码合集,让你过年前找到对象
  10. 深圳市地方税务局数据复制软件采购