我对 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
但是,数字是错误的(数量太高了),当我之前的查询给我 1900 时,我得到了大约 1600 行。我假设我的 JOIN 语句有问题,但我不知道它是什么。谁能给我一个有效的查询,或者为我的问题指出一个很好的参考?
任何指向良好的通用 SQL 帮助存储库的方向都会很棒......我还没有真正找到任何一个既全面又易于理解的地方。
PS - 我在该查询中调用 SUM() 两次会减慢我的代码速度吗?我不知道 SQL 是如何工作的……从 QUANTITY 列中获取结果并将它们相乘是否足够聪明?如果没有,更有效地运行它的语法是什么?