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
非常感谢任何帮助。最好是在一个查询中。
答案 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