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

-- 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. 实例学习SSIS(一)

    网址: http://www.cnblogs.com/tenghoo/archive/2009/10/archive/2009/10/archive/2009/10/archive/2009/10/a ...

  2. maven向本地库添加jar包

    mvn install:install-file -DgroupId=com.lowagie -DartifactId=itextasian -Dversion=1.0 -Dpackaging=jar ...

  3. 可以foreach的 必须继承IEnumable 接口才行

    只要是继承IEnumable 都可以用foreach遍历

  4. Asp.net中FileUpload控件实现图片上传并带预览显示

    单一图片上传——“选择”+“上传”,.NET默认模式: 1.实现原理:     采用FileUpload控件默认的使用方式,先由“选择”按钮选择图片,然后单击“上传”按钮完成上传,并可在“上传”按钮的 ...

  5. 【校招面试 之 C/C++】第19题 C++ STL(一)

      容器名称 说明 vector 典型的序列容器,C++标准严格要求次容器的实现内存必须是连续的,唯一可以和标准C兼容的stl容器,任意元素的读取.修改具有常数时间复杂度,在序列尾部进行插入.删除是常 ...

  6. OpenStack的架构详解(转)

    OpenStack既是一个社区,也是一个项目和一个开源软件,它提供了一个部署云的操作平台或工具集.其宗旨在于,帮助组织运行为虚拟计算或存储服务的云,为公有云.私有云,也为大云.小云提供可扩展的.灵活的 ...

  7. java 错误: 找不到或无法加载主类

    这个问题应该很常见的,笔者经常手工编译一些测试代码或者小工具,经常用到 javac和java来编译并运行一些简单的小工具. 以Hello World来测试. HelloWorld.java publi ...

  8. [SoapUI] 各种日期计算

    import java.util.*; import java.text.SimpleDateFormat; // current date String dateNew = today() // t ...

  9. APP自动化测试怎么测?

    一般来说工具还有技术都是千篇一律 测试测到最后还是业务能力...

  10. mysql 1045 access denied for user********

    另一个方法Windows: 1. 管理员登陆系统,停止mysql服务或者结束mysqld-nt进程2. 进入命令行,来到mysql的安装目录.假设安装目录为 d:/mysql/ , CMD进入命令行3 ...