【问题标题】:SQL Query values change when I join another table当我加入另一个表时,SQL 查询值发生变化
【发布时间】:2013-11-12 05:16:49
【问题描述】:

因此,我试图在一家小公司的数据库中调查库存周转率。我基本上在做的是获取 Items 表并将其加入 POLineItemReceipts 表,然后我将 Items 表加入 SalesTransactionLineItems 表并试图找出我购买的每件商品的数量(在 POLineItemReceipts 中)以及我购买了多少已售出(在 SalesTransactionLineItems 中),然后将这两个数字相除以查看我的营业额。

我的查询适用于每个单独的表,即 SalesTransactionLineItems 和 POLineItemReceipts,但是当我尝试将两个表集成到一个查询中时,它会为我的 SUM(Quantity) 列提供随机的奇怪数字。 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

和

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

然后合并

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

特别注意 Item_PK 2 和 3(Y 是 totalsold,X 是 totalpurchased。我在 SQL server 中使用不同的标题运行查询)

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

【问题讨论】:

  • 当您“组合”查询时,您添加了额外的GROUP BY 字段。他们控制正在聚合的内容。
  • 您可以设置SQL Fiddle 来显示您的问题吗?
  • @PM77-1 我不确定你的意思。我取出了 i.Item_PK 以外的额外字段,然后将其他字段也从组中删除,得到了相同的错误结果。
  • @PM77-1 我也会试试。不知道该怎么做
  • 原始查询均未按i.description 和i.Qty_Comp_OnHand 分组。您还有一个 WHERE 过滤器,该过滤器在任何一个原始查询中都不存在。我只是指出您所做的不仅仅是组合两个查询。

标签: sql sql-server select join sum


【解决方案1】:

对于组合案例,您已使用额外的 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

【讨论】:

  • 问题依然存在。立即发布数据以供分析
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-02
  • 1970-01-01
  • 2021-08-30
  • 2015-11-25
  • 2021-01-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多