2016-12-12 23 views
1

我已經乘以TJM.intMaterialQuantity * TM.monMaterialCost這給了我在不同行中的每個材料項目的總數。我需要將這4個總計加起來並放到一個名爲monTotalMaterialCost的新列中。現在它的方式顯示monTotalMaterialCost中的每個材質。我如何將所有材料的總量合併爲一行,以便我可以在一行中看到工作和客戶以及總成本?如何將列的總數加在一起

SELECT 
    TJ.intJobID 
    ,TC.intCustomerID 
    ,TC.strLastName + ', ' + TC.strFirstName AS strCustomerName 
    ,(SUM (TJM.intMaterialQuantity) * SUM (TM.monMaterialCost)) AS monTotalMaterialCost 


FROM 
    TJobs    AS TJ 
    ,TJobCustomers  AS TJC 
    ,TCustomers   AS TC 
    ,TJobMaterials  AS TJM 
    ,TMaterials   AS TM 

WHERE 
     TJ.intJobID   = TJC.intJobID 
    AND TJC.intCustomerID = TC.intCustomerID 
    AND TJM.intMaterialID = TM.intMaterialID 
    AND TJM.intJobID  = TJ.intJobID 
    AND TJ.intJobID   = 1 

GROUP BY 
    TJ.intJobID 
    ,TC.intCustomerID 
    ,TC.strLastName + ', ' + TC.strFirstName 
    ,TJM.intMaterialQuantity 
    ,TM.monMaterialCost 

樣例輸入

--Insert into TMaterials 
INSERT INTO TMaterials (intMaterialID, strMaterials, monMaterialCost) 
VALUES (1, 'Nails', '4.99') 

INSERT INTO TMaterials (intMaterialID, strMaterials, monMaterialCost) 
VALUES (2, 'Drywall per 32 sqft', '12.99') 

INSERT INTO TMaterials (intMaterialID, strMaterials, monMaterialCost) 
VALUES (3, '2 x 4', '1.89') 

INSERT INTO TMaterials (intMaterialID, strMaterials, monMaterialCost) 
VALUES (4, 'Paint per gallon', '32.00') 

INSERT INTO TMaterials (intMaterialID, strMaterials, monMaterialCost) 
VALUES (5, 'Tile per sqft', '4.99') 

INSERT INTO TMaterials (intMaterialID, strMaterials, monMaterialCost) 
VALUES (6, 'Copper Water 10ft line', '6.99') 

INSERT INTO TMaterials (intMaterialID, strMaterials, monMaterialCost) 
VALUES (7, 'Screws', '4.99') 

INSERT INTO TMaterials (intMaterialID, strMaterials, monMaterialCost) 
VALUES (8, 'Shingles', '40.99') 

INSERT INTO TMaterials (intMaterialID, strMaterials, monMaterialCost) 
VALUES (9, 'Tar Paper per sqft', '1.99') 

--Insert into TJobMaterials 

--Materials for Job 1 Customer 1 
INSERT INTO TJobMaterials (intJobID, intMaterialID, intMaterialQuantity) 
VALUES (1, 1, 50) 

INSERT INTO TJobMaterials (intJobID, intMaterialID, intMaterialQuantity) 
VALUES (1, 2, 20) 

INSERT INTO TJobMaterials (intJobID, intMaterialID, intMaterialQuantity) 
    VALUES (1, 3, 20) 

INSERT INTO TJobMaterials (intJobID, intMaterialID, intMaterialQuantity) 
VALUES (1, 4, 5) 

INSERT INTO TJobMaterials (intJobID, intMaterialID, intMaterialQuantity) 
VALUES (1, 5, 35) 

/* 
Output I'm Getting 

intJobID strJobDescription intJobStatusID strJobStatus monTotalMaterialCost 
    1   Kitchen Remodel   3   Complete   160.00 
    1   Kitchen Remodel   3   Complete   37.80 
    1   Kitchen Remodel   3   Complete   259.80 
    1   Kitchen Remodel   3   Complete   174.65 
    1   Kitchen Remodel   3   Complete   249.50 

    Output Wanted 

    intJobID strJobDescription intJobStatusID strJobStatus monTotalMaterialCost 
     1   Kitchen Remodel   3    Complete   881.75 

     I need the total of all 5 outputs into one final total into monTotalMaterialCost 

*/

所需的輸出: intJobID = 1 strJobDescription =廚房改造strJobStatus =完全monTotalMaterialCost = 881.75

什麼我得到: intJobID = 1 strJobDescription =廚房改造strJobStatus =完成monTotalMaterialCost = 7391.80

發生了什麼:我有5種不同的材料從TJM.intMaterialQuantity。每行的每個值爲50,20,20,5,35然後,我從TM.monMaterialCost獲得5種不同的成本,這些值按照4.99,12.99,1.89,32.00,4.99的相同順序匹配。我得到了50 + 20 + 20 + 5 + 35 = 130和4.99 + 12.99 + 1.89 + 32.00 + 4.99 = 56.86所以我得到了最終方程130 * 56.86 = 7,391.80。

我需要的是50 * 4.99 = 249.50,20 * 12.99 = 259.80,20 * 1.89 = 37.80,5 * 32.00 = 160,35 * 4.99 = 174.65我需要將所有這些總計加在一起總計在工作材料上花費的總數爲881.75。

我希望這有助於更好地理解我的問題。

我已經想通了。我已經發布正確答案爲未來的問題:

SELECT 
TJ.intJobID 
,TJ.strJobDescription 
,TJ.intJobStatusID 
,TJS.strJobStatus 
, SUM (TJM.intMaterialQuantity * TM.monMaterialCost) AS monTotalMaterialCost 


FROM TJobs AS TJ  
     join TJobMaterials AS TJM on TJM.intJobID = TJ.intJobID 
     join TMaterials AS TM on TJM.intMaterialID = TM.intMaterialID 
     join TJobStatus AS TJS on TJ.intJobStatusID = TJS.intJobStatusID 

GROUP BY 
TJ.intJobID 
,TJ.strJobDescription 
,TJ.intJobStatusID 
,TJS.strJobStatus 
+1

如果你可以給一個樣本輸入和輸出樣本它會更容易幫助你 – gh9

+3

剛剛從組中刪除列TJM.intMaterialQuantity,TM.monMaterialCost BY子句 –

+0

@IgorBorisenko不起作用。我得到73910.80。總數應該是3,138.75 –

回答

1

你真的應該停止使用陳舊的ANSI-89式的連接。 ANSI-92風格的連接已經存在了25年。他們閱讀起來更簡單,並防止了很多意外錯誤。 http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx

查詢的後半部分看起來像這樣。

FROM TJobs AS TJ 
join TJobCustomers AS TJC on TJ.intJobID = TJC.intJobID 
join TCustomers AS TC on TJC.intCustomerID = TC.intCustomerID 
join TJobMaterials AS TJM on TJM.intJobID = TJ.intJobID 
join TMaterials AS TM on TJM.intMaterialID = TM.intMaterialID 
WHERE TJ.intJobID = 1 
+0

感謝您的建議!我還在學習。這給了我每一行中的每個材料總數。這給了我5行。我需要將所有5行的總數放在一行中的一列中。例如,此查詢爲我提供了37.80,174.65,249.50,259.80,160.00這些是每種不同材料乘以其數量的總和。然後我需要將所有這些加在一起,因此我顯示了一行給出了該作業所有材料的總數。 –