我对SQL很陌生,我的所有背景都是过程语言。我遇到了很多困难,直到现在才能够研究我所有问题的答案。SQL连接和乘法
我有两个表,结构如下所示:
dbo.SERVICE - 所有的服务订单清单/维修电话不断
SERVICE_ORDER_NO | PART_NO | QUANTITY | PART_DESC | CREATED_DT | CHANGED_DT
dbo.PART - 所有零件的机器列表被服务
PART_NO | COST
我想获得在给定的时间内使用的部件,包括总数量和总成本,并且排序数量的列表。到目前为止,我已经能够得到使用的部件,并适当,使用下面的查询(日期已硬编码为简单起见)数量:
SELECT SERV.PART_NO, SUM(SERV.QUANTITY) AS QUANTITY
FROM dbo.SERVICE SERV
WHERE SERV.CREATED_DT >= '01/01/2012' AND SERV.CREATED_DT < '02/01/2012'
GROUP BY SERV.PART_NO
ORDER BY QUANTITY DESC
我遇到了麻烦的总成本不过。我尝试这样做:
SELECT SERV.PART_NO, SUM(SERV.QUANTITY) AS QUANTITY, SUM(SERV.QUANTITY * PART.COST) AS COST
FROM dbo.SERVICE SERV
INNER JOIN dbo.PART PART
ON PART.PART_NO = SERV.PART_NO
WHERE SERV.CREATED_DT >= '01/01/2012' AND SERV.CREATED_DT < '02/01/2012'
GROUP BY SERV.PART_NO
ORDER BY QUANTITY DESC
然而,数字是错误的(量太高了),我也得到约1600行的时候我以前的查询给了我1900,我假设有什么毛病我的JOIN语句,但我不知道它是什么。任何人都可以给我一个工作查询,或指出我对我的问题很好的参考?
任何方向到良好的一般SQL帮助存储库也将是伟大的......我还没有真正发现任何一个既全面又易于理解的地方。
PS - 这个事实,我在该查询中调用SUM()两次会减慢我的代码?我不知道SQL是如何工作的......是否足够聪明地从QUANTITY列中获取结果并将它们相乘,或者不是?如果不是,那么更有效地运行它的语法是什么?
然后你有同样的部分的多个成本,你需要先选择一个,它可以是最小值,最大值,平均值.... – Lamak 2012-07-25 17:26:44
这听起来像你需要修复成本表,所以你有每个成本的时间框架。该表中part_no不唯一。 – 2012-07-25 17:47:51