这是实际场景当中的一个例子,拿出来分析总结思路。

-- SQL 查询 --
SELECT  orderQuery.Rk_SkuCode ,
        orderQuery.SkuName,
        SUM(ISNULL(orderQuery.OrderTotal, 0))
        - SUM(ISNULL(removeQuery.RemoveTotal, 0))
        - SUM(ISNULL(pickQuery.PickTotal, 0))
        - SUM(ISNULL(tempPickQuery.TempPickTotal, 0)) AS RealOrders ,
        SUM(ISNULL(orderQuery.OrderTotal, 0)) AS Orders ,
        SUM(ISNULL(removeQuery.RemoveTotal, 0)) AS Removes ,
        SUM(ISNULL(pickQuery.PickTotal, 0)) AS Picks ,
        SUM(ISNULL(stockQuery.StockTotal, 0)) AS Stocks ,
        SUM(ISNULL(tempPickQuery.TempPickTotal, 0)) AS TempPicks
FROM    ( SELECT    Rk_SkuCode , do.Rk_SkuName AS SkuName,
                    SUM(do.UnitQty) AS OrderTotal
          FROM      dbo.SALE_Bill_Sale_Order o ,
                    dbo.SALE_Bill_Sale_Order_Detail do
          WHERE     o.Fk_ATS_Wfs_NodeId != 100100170
                    AND o.Fk_BillTypeId = 100100010
                    AND o.Pk_OrderId = do.Fk_OrderId
                    AND o.Fk_WarehouseId = 140416154556733
          GROUP BY  Rk_SkuCode,do.Rk_SkuName
        ) orderQuery
        LEFT OUTER JOIN ( SELECT    Rk_SkuCode ,
                                    SUM(rd.Quantity) AS RemoveTotal
                          FROM      dbo.WMS_Bill_Remove r ,
                                    dbo.WMS_Bill_Remove_Detail rd
                          WHERE     r.Pk_RemoveId = rd.Fk_RemoveId
                                    AND r.Fk_WarehouseId = 140416154556733
                                    AND r.Fk_BillTypeId = 100100110
                                    AND r.Fk_ATS_Wfs_NodeId = 100300140
                          GROUP BY  Rk_SkuCode
                        ) removeQuery ON orderQuery.Rk_SkuCode = removeQuery.Rk_SkuCode
        LEFT OUTER JOIN ( SELECT    Rk_SkuCode ,
                                    SUM(s.Quantity) AS PickTotal
                          FROM      dbo.WMS_Stock s ,
                                    dbo.WMS_Info_PartArea p
                          WHERE     p.Pk_PartAreaId = s.Fk_PartAreaId
                                    AND s.Fk_WarehouseId = 140416154556733
                                    AND p.Ek_Type = 100100120
                          GROUP BY  Rk_SkuCode
                        ) pickQuery ON orderQuery.Rk_SkuCode = pickQuery.Rk_SkuCode
        LEFT OUTER JOIN ( SELECT    Rk_SkuCode ,
                                    SUM(s.Quantity) AS StockTotal
                          FROM      dbo.WMS_Stock s ,
                                    dbo.WMS_Info_PartArea p
                          WHERE     p.Pk_PartAreaId = s.Fk_PartAreaId
                                    AND s.Fk_WarehouseId = 140416154556733
                                    AND p.Ek_Type = 100100150
                          GROUP BY  Rk_SkuCode
                        ) stockQuery ON orderQuery.Rk_SkuCode = stockQuery.Rk_SkuCode
        LEFT OUTER JOIN ( SELECT    Rk_SkuCode ,
                                    SUM(s.Quantity) AS TempPickTotal
                          FROM      dbo.WMS_Stock s
                          WHERE     s.Fk_WarehouseId = 140416154556733
                                    AND s.Fk_LocationId = 140612114677165
                          GROUP BY  Rk_SkuCode
                        ) tempPickQuery ON orderQuery.Rk_SkuCode = tempPickQuery.Rk_SkuCode
GROUP BY orderQuery.Rk_SkuCode,orderQuery.SkuName
HAVING  ( SUM(ISNULL(orderQuery.OrderTotal, 0))
          - SUM(ISNULL(removeQuery.RemoveTotal, 0))
          - SUM(ISNULL(pickQuery.PickTotal, 0))
          - SUM(ISNULL(tempPickQuery.TempPickTotal, 0)) ) > 0

SQL笔记---多表左联的更多相关文章

  1. SQL SERVER 数据库表同步复制 笔记

    SQL SERVER 数据库表同步复制 笔记 同步复制可运行在不同版本的SQL Server服务之间 环境模拟需要两台数据库192.168.1.1(发布),192.168.1.10(订阅) 1.在发布 ...

  2. sql server 关于表中只增标识问题 C# 实现自动化打开和关闭可执行文件(或 关闭停止与系统交互的可执行文件) ajaxfileupload插件上传图片功能,用MVC和aspx做后台各写了一个案例 将小写阿拉伯数字转换成大写的汉字, C# WinForm 中英文实现, 国际化实现的简单方法 ASP.NET Core 2 学习笔记(六)ASP.NET Core 2 学习笔记(三)

    sql server 关于表中只增标识问题   由于我们系统时间用的过长,数据量大,设计是采用自增ID 我们插入数据的时候把ID也写进去,我们可以采用 关闭和开启自增标识 没有关闭的时候 ,提示一下错 ...

  3. CockroachDB学习笔记——[译]CockroachDB中的SQL:映射表中数据到键值存储

    CockroachDB学习笔记--[译]CockroachDB中的SQL:映射表中数据到键值存储 原文标题:SQL in CockroachDB: Mapping Table Data to Key- ...

  4. SQL 笔记 By 华仔

    -------------------------------------读书笔记------------------------------- 笔记1-徐 最常用的几种备份方法 笔记2-徐 收缩数据 ...

  5. Oracle笔记 多表查询

    Oracle笔记  多表查询   本次预计讲解的知识点 1. 多表查询的操作.限制.笛卡尔积的问题: 2. 统计函数及分组统计的操作: 3. 子查询的操作,并且结合限定查询.数据排序.多表查询.统计查 ...

  6. 你真的会玩SQL吗?表表达式,排名函数

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

  7. sql 删除所有表

    sql删除所有表语句: use 数据库名(是要删除表的所在的那个数据库的名称) GO declare @sql varchar(8000) while (select count(*) from sy ...

  8. **SQL某一表中重复某一字段重复记录查询与处理

    sql某一表中重复某一字段重复记录查询与处理   1.查询出重复记录  select 重复记录字段 form  数据表 group by houseno having count(重复记录字段)> ...

  9. sql 笔记(mysql)

    Windows 安装mysql(zip包) 1,zip包解压到要安装目录 2,配置环境变量,Path后加mysql路径\bin 3,修改配置文件,mysql目录下my-default.ini base ...

随机推荐

  1. 常用修图工具的一些使用技巧及问题解决方法——ai

    一.ai如何修改画布大小 一. ai如何修改画布大小: 1. 左上角菜单中的文件——文档设置(也可以直接点菜单栏下边的控制栏中的文档设置) 2. 文档设置界面中,点击右上角“编辑画板“ 3. 此时面板 ...

  2. 'wmic' 不是内部或外部命令,也不是可运行的程序 解决方法

    在环境变量中查看变量名Path下的变量值是否有以下讯息? 如没有复制(Ctrl+C).黏贴(Ctrl+V)→确定即可. %SystemRoot%;%SystemRoot%\system32;%Syst ...

  3. 安全运维 -- Linux服务器使用公私钥密匙证书登录

    环境:Ubuntu 16 前言 黑客遍地都是,ssh/pop3/ftp等爆破工具的流行让站长的日常运维工作量大大加重.Metasplot,Bruter等工具更是针对以上协议有专门 的破解方法,有字典破 ...

  4. MVC FormCollection 无法获取值的问题

     把action定义为[HttpPost],并且ajax.beginform中ajaxoption中定义为Post,在提交表单时就可以获取FormCollection的值了.httpGet或者后台不定 ...

  5. 面向对象设计模式纵横谈:Adapter 适配器模式(笔记记录)

    适配(转换)的概念无处不在 适配,即在不改变原有实现的基础上,将原先不兼容的接口转换为兼容的接口.生活中适配转换的例子太多了,也是设计模式里面比较容易理解的一个模式. 动机(Motivation) 在 ...

  6. ubuntu 开机自动挂载nfs服务器上的home分区

    通过‘fstab’也可以配置 NFS 和 SMB 的共享目录.由于涉及到的可选项很重要,并且需要了解一些协议的工作情况,您得先阅读 Samba 和 NFS . 基本语法和本地介质相差不是很多.条目中的 ...

  7. pthread_exit pthread_join

    int pthread_join(pthread_t thread, void **retval); int pthread_detach(pthread_t thread); void pthrea ...

  8. PAT 1084 外观数列(20)(代码+思路+推荐测试用例)

    1084 外观数列(20 分) 外观数列是指具有以下特点的整数序列: d, d1, d111, d113, d11231, d112213111, ... 它从不等于 1 的数字 d 开始,序列的第 ...

  9. LINUX网络编程 IO 复用

    参考<linux高性能服务器编程> LINUX下处理多个连接时候,仅仅使用多线程和原始socket函数,效率十分低下 于是就出现了selelct poll  epoll等IO复用函数. 这 ...

  10. 2018.10.19 NOIP模拟 硬币(矩阵快速幂优化dp)

    传送门 不得不说神仙出题人DZYODZYODZYO出的题是真的妙. f[i][j][k]f[i][j][k]f[i][j][k]表示选的硬币最大面值为iii最小面值不小于jjj,总面值为kkk时的选法 ...