所有相同的零件号,一个表中的SUM,另一个表中的平均值

时间:2017-03-28 08:04:59

标签: sql-server

SQL Server新手,但稍微使用了PL / SQL 尝试创建一个查询,该查询将获取部件号并总结库存,然后平均在过去180天内售出的数量。这是我到目前为止所做的。

SELECT  
    S.PartNum, S.PartDescription, S.CLASSID, SUM(D.STOCK), AVG(S2.QTY)    
  FROM PARTWHSE AS D    
    JOIN PART AS S ON S.PartNum = D.PartNum  
    LEFT JOIN PARTTRAN AS S2 ON S2.PartNum = S.PartNum  
  WHERE S.TRACKCODE = 0
    AND S2.TRANDATE >= (GETDATE() -180)  
  GROUP BY PartNum, PartDescription, CLASSID;

问题是我的总和一直在关闭(结束),这使我相信它在我总结时会引入太多行。平均值很好。没有平均值的总和是好的。

样本数据表01
  PartNum |股票|
101.123 | 100 |
101.123 | 250 |
101.123 | 150 |

样本数据表02

PartNum |数量
101.123 | 200个
101.123 | 200个
101.123 | 200

目前的结果 S.PartNum | Sum(D.STOCK) | AVERAGE (S2.QTY)
101.123 | 3,000 | 200

期望的结果 S.PartNum | Sum (STOCK) | AVERAGE (S2.QTY)
101.123 | 500 | 200

非常感谢任何帮助。最好是在一个查询中。

1 个答案:

答案 0 :(得分:0)

使用具有适当聚合函数和分组的2个子查询。数据的问题是你有不同的STOCK和QTY表,并且这些表的行之间没有相关性(通过时间戳或其他键)。

select p.PartNum, isnull(s.Stock, 0) as Stock, isnull(q.Qty, 0) as Qty
from PART p
left join
(
    select s.PartNum, sum(s.Stock) as Stock
    from PARTWHSE s
    group by s.PartNum
) s on s.PartNum = p.PartNum
left join
(
    select q.PartNum, avg(q.QTY) as Qty
    from PARTTRAN q
    group by q.PartNum
) q on q.PartNum = p.PartNum