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

-- 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. phython学习

    Python 中文学习大本营 关于作者 赞助本站 The Python Tutorial (Python 2.7.X) 的中文翻译版本.Python Tutorial 为初学 Python 必备官方教 ...

  2. IE8不支持数组的indexOf方法 如何解决

    转自:http://www.jbxue.com/article/8367.html 原因分析: 这是一个js bug, 在IE8下,js数组没有indexOf方法,会报错:而在其它浏览器下(Firef ...

  3. x-www-form-urlencoded

    就是application/x-www-from-urlencoded,会将表单内的数据转换为键值对,比如,name=java&age = 23 postman: 2.ajax传值

  4. Zookeeper 系列(三)Zookeeper API

    Zookeeper 系列(三)Zookeeper API 本节首先介绍 Zookeeper 的 Shell 命令,再对 Java 操作 Zookeeper 的三种方式进行讲解,本节先介绍 Zookee ...

  5. LINUX网络编程 IO 复用

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

  6. RSA生成、加密、解密、签名。

    首先,要会生成RSA密码对. https://app.alipay.com/market/document.htm?name=saomazhifu#page-23    (事例中的密钥对好像有问题,最 ...

  7. 小程序getUserInfo授权升级更新登录优化

    小程序基础库2.0.7更新小程序组件 <button> 新增 open-type 属性有效值 openSetting,所以说,再也不能愉快的直接调用getUserInfo了.但是不想用官方 ...

  8. 使用delphi 开发多层应用(二十三)KbmMW 的WIB

    解释WIB 是什么之前,先回顾以下我们前面的各种服务工作方式.前面的各种服务的工作方式都是请求/应答方式. 客户端发送请求,服务器端根据客户端的请求,返回相应的结果.这种方式是一种顺序式访问,是一种紧 ...

  9. 521. Longest Uncommon Subsequence I

    static int wing=[]() { std::ios::sync_with_stdio(false); cin.tie(NULL); ; }(); class Solution { publ ...

  10. hdu - 1072(dfs剪枝或bfs)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1072 思路:深搜每一个节点,并且进行剪枝,记录每一步上一次的s1,s2:如果之前走过的时间小于这一次, ...