2015-09-27 102 views
-4

這些都是五個定表 http://i58.tinypic.com/53wcxe.jpg如何解決這個複雜的SQL查詢

這是recomanded結果 http://i58.tinypic.com/2vsrts7.jpg

請幫助我如何可以編寫一個查詢產生這樣的結果。 不知道怎麼回事!

SELECT K.* , COUNT (A.Au_ID) AS AnzahlAuftr 
FROM Kunde K 
LEFT JOIN Auftrag A ON K.Kd_ID = A.Au_Kd_ID 
GROUP BY K.Kd_ID,K.Kd_Firma,K.Kd_Strasse,K.Kd_PLZ,K.Kd_Ort 
ORDER BY K.Kd_PLZ DESC; 

SELECT COUNT (F.F_ID) AS AnzahlFahrt 
FROM Fahrten F 
RIGHT JOIN Auftrag A ON A.Au_ID = F.F_Au_ID 

SELECT SUM (T.Ts_Strecke) AS SumStrecke 
FROM Teilstrecke T 
LEFT JOIN Fahrten F ON F.F_ID = T.Ts_F_ID 

如何加入這些3合一?

+0

請幫助我如何寫一個查詢有相同的結果在圖片(結果)! http://i58.tinypic.com/2vsrts7.jpg –

回答

1

在Strasse等上分組是不必要的,而且可能相當昂貴。這種方法怎麼樣:

SELECT K.*, ISNULL(Au.AnzahlAuftr,0) AS AnzahlAuftr, ISNULL(Au.AnzahlFahrt,0) AS AnzahlFahrt, ISNULL(Au.SumStrecke,0) AS SumStrecke 
FROM Kunde K 
LEFT OUTER JOIN 

(SELECT A.Au_Kd_ID, COUNT(*) AS AnzahlAuftr, SUM(Fa.AnzahlFahrt1) AS AnzahlFahrt, SUM(Fa.SumStrecke2) AS SumStrecke 
FROM Auftrag A LEFT OUTER JOIN 
    (SELECT F.F_Au_ID, COUNT(*) AS AnzahlFahrt1, SUM(Ts.SumStrecke1) AS SumStrecke2 
    FROM Fahrten F LEFT OUTER JOIN 
     (SELECT T.Ts_F_ID, SUM(T.Ts_Strecke) AS SumStrecke1 
     FROM Teilstrecke T 
     GROUP BY T.Ts_F_ID) AS Ts 
    ON Ts.Ts_F_ID = F.F_ID 
    GROUP BY F.F_Au_ID) AS Fa 
ON Fa.F_Au_ID = A.Au_ID 
GROUP BY A.Au_Kd_ID) AS Au 

ON Au.Au_Kd_ID = K.Kd_ID 
+0

非常感謝你回答它看起來很好,但仍然不工作,錯誤:Meldung 208,Ebene 16,Status 1,Zeile 1 Ungültiger對象名稱'Aufrag'。 –

+0

抱歉,我的意思是這個錯誤:Meldung 4104,Ebene 16,Status 1,Zeile 13 Der mehrteilige Bezeichner'Fahrten.F_Au_ID'konnte nicht gebunden werden。 –

+0

應該是F.F_Au_ID,我更新了答案。 –