当我加入另一个表时,SQL查询值会更改

时间:2013-11-01 01:23:25

标签: sql sql-server select join sum

所以我试图调查小公司数据库的库存周转率。我基本上正在做的是获取Items表并将其加入到POLineItemReceipts表中,然后我将Items表连接到SalesTransactionLineItems表并尝试找出我购买的每个项目的数量(在POLineItemReceipts中)以及我有多少已售出(在SalesTransactionLineItems中)然后将这两个数字分开以查看我的营业额。

我的查询适用于每个单独的表,SalesTransactionLineItems和POLineItemReceipts,但是当我尝试将两个表集成到一个查询中时,它为我的SUM(数量)列提供了随机奇怪的数字。 POLineItemReceipts和SalesTransactionLineItems表都有一个SUM,因为它们都有一个数量列。

我怀疑我的联盟正在抛弃一切,但我不确定。

以下是我的单独查询

SELECT DISTINCT i.Item_PK
    ,i.Code
    ,SUM(p.Quantity) as Y
FROM POLineItemReceipts p JOIN Items i ON i.Item_PK = p.Item_FK
GROUP BY  i.Item_PK, i.Code
ORDER BY i.Item_PK

enter image description here

SELECT DISTINCT i.Item_PK
    ,i.Code
    ,SUM(p.Quantity) as Y
FROM SalesTransactionLineItems p JOIN Items i ON i.Item_PK = p.Item_FK
GROUP BY  i.Item_PK, i.Code
ORDER BY i.Item_PK

enter image description here

然后合并

SELECT  DISTINCT i.Item_PK              
                    ,i.Code                 AS         Code
                    ,SUM(pr.Quantity)       AS TotalPurchased_X
                    ,SUM(tl.Quantity)       AS TotalSold_Y

    FROM
                    Items i JOIN POLineItemReceipts pr ON i.Item_PK = pr.Item_FK
                    JOIN SalesTransactionLineItems tl ON i.Item_PK = tl.Item_FK
    WHERE
                    i.ItemType_FK = 1
    GROUP BY
                    i.Item_PK
                    ,i.Code

    ORDER BY
                    i.Item_PK ASC

enter image description here

特别注意Item_PK 2和3(Y是totalsold,X是全部购买。我在SQL服务器中使用不同的标题运行查询)

不确定如何解决这个问题。任何帮助将不胜感激......

1 个答案:

答案 0 :(得分:0)

对于组合案例,您已使用额外的i.Description,i.Qty_Comp_OnHand进行分组。如果你这样做会带来什么:

SELECT  DISTINCT i.Item_PK              AS ID
                ,i.Code                 AS         Code                    
                ,SUM(pr.Quantity)       AS         TotalPurchased
                ,SUM(tl.Quantity)       AS         TotalSold
                ,(SUM(tl.Quantity)/SUM(pr.Quantity)) AS Turnover
FROM
                Items i JOIN POLineItemReceipts pr ON i.Item_PK = pr.Item_FK
                JOIN SalesTransactionLineItems tl ON i.Item_PK = tl.Item_FK
WHERE
                i.ItemType_FK = 1
GROUP BY
                i.Item_PK
                ,i.Code

ORDER BY
                ID ASC