zoukankan      html  css  js  c++  java
  • 数据库查询结果其中一行减去另外两行的和,其余数据不变

    今天处理到一个比较棘手的问题。就是一张统计表中“工资及工资性费用”中要减去“部门奖金(2017年奖金)”,“奖金(其他)”这两个项目的和。

    由于不是相邻两行或者相邻两列之间做差,所以没有普遍性。

    思路就是:

    首先查询出排除“工资及工资性费用”的集合。(SELECT * FROM XXX WHERE FYXMC NOT LIKE '%工资及工资性费用%' )   T1

    然后,将标号为30和31的两行数据每个字段用SUM一次就和,分组字段就是除名称之外的所有字段。 其中REPLACE和TRIM的作用是去除左右两边的空格,包括全角的空格。

    SELECT 

    REPLACE(REPLACE(TRIM(BOTH FROM FYXMC),' '),' ') FYXMC,SUM(JSFY) JSFY,SUM(JCBJSFY) JCBJSFY,SUM(YXWHJSFY) YXWHJSFY,SUM(WHZJSFY) WHZJSFY,SUM(HYSYJSFY) HYSYJSFY,
    SUM(GZBJSFY) GZBJSFY,SUM(JSZCJSFY) JSZCJSFY,SUM(GSCMJSFY) GSCMJSFY,SUM(XMJSJSFY) XMJSJSFY,SUM(SWWZJSFY) SWWZJSFY,SUM(CPFHJSFY) CPFHJSFY,
    SUM(JGGLJSFY) JGGLJSFY,SUM(CWJSFY) CWJSFY,SUM(RLZYJSFY) RLZYJSFY,SUM(BGSJSFY) BGSJSFY

    FROM 

    .... .....

    GROUP BY REPLACE(REPLACE(TRIM(BOTH FROM FYXMC),' '),' '),T.JSFY,T.JCBJSFY,T.YXWHJSFY,T.WHZJSFY,T.HYSYJSFY,T.GZBJSFY,
    T.JSZCJSFY,T.GSCMJSFY,T.XMJSJSFY,T.SWWZJSFY,T.CPFHJSFY,T.JGGLJSFY,T.CWJSFY,T.RLZYJSFY,T.BGSJSFY。

    其次,以左外关联 LEFT JOIN的方式进行关联,T2每一个字段减去T4的每一个字段:

    (SELECT '工资及工资性费用(不包含奖金)' FYXMC ,
    T2.JSFY-T4.JSFY JSFY,T2.JCBJSFY-T4.JCBJSFY JCBJSFY,T2.YXWHJSFY-T4.YXWHJSFY YXWHJSFY,T2.WHZJSFY-T4.WHZJSFY WHZJSFY,T2.HYSYJSFY-T4.HYSYJSFY HYSYJSFY,
    T2.GZBJSFY-T4.GZBJSFY GZBJSFY,T2.JSZCJSFY-T4.JSZCJSFY JSZCJSFY,T2.GSCMJSFY-T4.GSCMJSFY GSCMJSFY,T2.XMJSJSFY-T4.XMJSJSFY XMJSJSFY,T2.SWWZJSFY-T4.SWWZJSFY SWWZJSFY,
    T2.CPFHJSFY-T4.CPFHJSFY CPFHJSFY,T2.JGGLJSFY-T4.JGGLJSFY JGGLJSFY,T2.CWJSFY-T4.CWJSFY CWJSFY,T2.RLZYJSFY-T4.RLZYJSFY RLZYJSFY,T2.BGSJSFY-T4.BGSJSFY BGSJSFY
    FROM

    T2

    LEFT JOIN T4 ON T4.FYXMC=T2.FYXMC )   T3

    最后,将处理过后的结果T1T3用UNION ALL合并成最终结果集。

     举一反三

    如果有其他的特殊需求,比如其中特定的一行减去另外一行的每一列的数据,也可以用这种思路进行操作。

  • 相关阅读:
    7.Ubuntu16.04安装Jenkins
    5.在Gitlab创建一个基于Sping Boot Maven项目
    4.ubuntu 16.04.6 离线安装 Git
    CNN注意事项_七月算法5月深度学习班第5次课程笔记
    Github 文件选择性上传
    一个Velocity Template Language学习的框架
    设计模式学习之代理模式(Proxy)
    ibatis入门教程一
    SimpleDataFormat详解
    使用Qmake在树莓派上开发Opencv程序
  • 原文地址:https://www.cnblogs.com/CryOnMyShoulder/p/8023454.html
Copyright © 2011-2022 走看看