首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自不同行数的两个表的数据之和

来自不同行数的两个表的数据之和
EN

Stack Overflow用户
提问于 2015-04-14 01:45:20
回答 2查看 82关注 0票数 1

有3个表(SorMaster、SorDetail和InvWarehouse):

SorMaster:

代码语言:javascript
复制
+------------+
| SalesOrder |
+------------+
|    100     |
|    101     |
|    102     |
+------------+

SorDetail:

代码语言:javascript
复制
+------------+------------+---------------+
| SalesOrder | MStockCode | MBackOrderQty |
+------------+------------+---------------+
|    100     |    PN-1    |       4       |
|    100     |    PN-2    |       9       |
|    100     |    PN-3    |       1       |
|    100     |    PN-4    |       6       |
|    101     |    PN-1    |       6       |
|    101     |    PN-3    |       2       |
|    102     |    PN-2    |      19       |
|    102     |    PN-3    |      14       |
|    102     |    PN-4    |       6       |
|    102     |    PN-5    |       4       |
+------------+------------+---------------+

InvWarehouse:

代码语言:javascript
复制
+------------+-----------+-----------+
| MStockCode | Warehouse | QtyOnHand |
+------------+-----------+-----------+
|    PN-1    |     A     |     1     |
|    PN-2    |     B     |     9     |
|    PN-3    |     A     |     0     |
|    PN-4    |     B     |     1     |
|    PN-1    |     A     |     0     |
|    PN-3    |     B     |     5     |
|    PN-2    |     A     |     9     |
|    PN-3    |     B     |     4     |
|    PN-4    |     A     |     6     |
|    PN-5    |     B     |     0     |
+------------+-----------+-----------+

预期结果:

代码语言:javascript
复制
+------------+-----------------+--------------+
| MStockCode | SumBackOrderQty | SumQtyOnHand |
+------------+-----------------+--------------+
|    PN-1    |       10        |      10      |
|    PN-2    |       28        |       1      |
|    PN-3    |       17        |       5      |
|    PN-4    |       12        |      13      |
|    PN-5    |       11        |       6      |
+------------+-----------------+--------------+

我一直在转圈,看不到尽头。它看起来应该很简单,但我就是不能把头绕着它。显然,SumBackOrderQty被计算为SumQtyOnHand的两倍。到目前为止,我一直在PHP中进行计算,而不是select语句,但希望在可能的情况下稍微清理一下。

当前查询语句是:

代码语言:javascript
复制
SELECT  SorDetail.MStockCode,
    SUM(SorDetail.MBackOrderQty) AS 'SumMBackOrderQty',
    SUM(InvWarehouse.QtyOnHand) AS 'SumQtyOnHand'

FROM    SysproCompanyJ.dbo.SorMaster SorMaster,
    SysproCompanyJ.dbo.SorDetail SorDetail LEFT OUTER JOIN SysproCompanyJ.dbo.InvWarehouse InvWarehouse
    ON SorDetail.MStockCode = InvWarehouse.StockCode


WHERE   SorMaster.SalesOrder = SorDetail.SalesOrder
    AND SorMaster.ActiveFlag != 'N'
    AND SorDetail.MBackOrderQty > '0'
    AND SorDetail.MPrice > '0'

GROUP BY SorDetail.MStockCode

ORDER BY    SorDetail.MStockCode ASC
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-14 04:10:28

在不提供完整图片的情况下,从RDBMS、数据库模式、您试图解决的问题的描述以及与上述问题相匹配的数据示例来看,以下只是基于Barmar的评论的解决方案可能是什么样子的说明:

代码语言:javascript
复制
SELECT SD.MStockCode, 
       SD.SumBackOrderQty, 
       IW.SumQtyOnHand
FROM (SELECT MStockCode, 
             SUM(MBackOrderQty) AS `SumBackOrderQty`
      FROM SorDetail
           JOIN SorMaster ON SorDetail.SalesOrder=SorMaster.SalesOrder
      WHERE SorMaster.ActiveFlag != 'N'
            AND SorDetail.MBackOrderQty > 0
            AND SorDetail.MPrice > 0
      GROUP BY MStockCode) AS SD
     LEFT JOIN (SELECT MStockCode, 
                       SUM(QtyOnHand) AS `SumQtyOnHand`
                FROM InvWarehouse
                GROUP BY MStockCode) AS IW ON SD.MStockCode=IW.MStockCode
ORDER BY SD.MStockCode;
票数 0
EN

Stack Overflow用户

发布于 2015-04-14 03:44:51

这里有一个方法:

代码语言:javascript
复制
select MStockCode, 
(select sum(MBackOrderQty) from sorDetail as T2
where T2.MStockCode = T1.MStockCode ) as SumBackOrderQty,
(select sum(QtyOnHand) from invWarehouse as T3
where T3.MStockCode = T1.MStockCode ) as SumQtyOnHand 
from 
(
select mstockcode from sorDetail
union
select mstockcode from invWarehouse
) as T1

在小提琴里:http://sqlfiddle.com/#!9/fdaca/6

尽管我的SumQtyOnHand值与您的不匹配(正如@Gordon所指出的)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29617849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档