如何将2个表中的数据加到1个表中?

时间:2016-05-04 07:39:09

标签: sql sql-server tsql join

当我注释掉与“Sales Line”或“Warehouse Entry”表相关的所有行时,查询按预期工作。但是当我按原样使用这个查询时;它返回错误(不切实际的高至少5位数)数据。

想法是迭代“物品”表并获得库存量以及销售数量和价值的总和。我认为我加入这些表格的方式肯定有问题。 “仓库条目”和“销售线”表都有多个条目,可以链接到I.[No_]

USE NAV2009_R2_SHOWTEX_LIVE

SELECT I.[No_]
    ,sum(S.[Quantity (Base)]) AS [Quantity Sold]
    ,min(I.[IP Total (Manual)]) * sum(WE.[Quantity]) AS [Stock Value]
    ,sum(WE.[Quantity]) AS [Quantity Stock]
FROM [Item] AS I
INNER JOIN [Warehouse Entry] AS WE ON WE.[Item No_] = I.[No_]
    AND WE.[Location Code] = 'BU'
    AND WE.[Bin Code] <> 'SHIPPING'
    AND WE.[Bin Code] <> 'WORKSHOP'
    AND WE.[Bin Code] <> 'OUTBOX'
    AND WE.[Bin Code] <> 'CUT'
    AND WE.[Bin Code] <> 'VERZEND'
INNER JOIN [Sales Line] AS S ON S.[No_] = I.[No_]
    AND S.[Shipment Date] > '07/01/2015'
    AND S.[Document Type] = 1
WHERE I.[No_] LIKE '140003000007'
GROUP BY I.[No_]

样本数据

编号|已售出数量|股票价值|数量库存

错误的数据

140003000007|204484537.36000000000000000000|13051602.124400|    2355884.86000000000000000000

正确数据

140003000007|61703.24000000000000000000|13623.801800|2459.17000000000000000000

1 个答案:

答案 0 :(得分:2)

SELECT  sumQuantityBase as [Quantity Sold],
        minIP * sumQuantityBase as [Stock Value],
        sumQuantityBase as [Quantity Stock]
FROM
    (SELECT MIN(I.[IP Total (Manual)] )as minIP,
            No_
     FROM I 
     WHERE [No_] like '140003000007'
     GROUP BY No_) MinI INNER JOIN
    (SELECT SUM([Quantity]) as sumQuantity,
            [Item No_]
     FROM WE 
    WHERE [Location Code] = 'BU' 
      AND [Bin Code] <> 'SHIPPING'  
      AND [Bin Code] <> 'WORKSHOP' 
      AND [Bin Code] <> 'OUTBOX'  
      AND [Bin Code] <> 'CUT' 
      AND [Bin Code] <> 'VERZEND'    
      GROUP BY [Item No_] ) SumWE
  ON MinI.[No_]  = SumWE[Item No_] INNER JOIN
  (SELECT SUM([Quantity (Base)]) as sumQuantityBase,
          No_
   FROM S 
   WHERE [Shipment Date] > '07/01/2015' 
     AND [Shipment Date] IS NOT NULL  
     AND [Document Type] = 1 
  GROUP BY No_ ) SumS
 ON SumS.[No_] = MinI.[No_]

试试这个。当您想使用sum或min函数聚合数据时,我建议您在子集中进行。这样你就可以保持简单