如何解决这个复杂的SQL查询

问题描述:

这些都是五个定表 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 –

在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,我更新了答案。 –