我對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