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

时间:2015-09-27 23:48:59

标签: mssql-jdbc

这是五个给定的表格 http://i58.tinypic.com/53wcxe.jpg

这是重新计算的结果 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个加入一个?

1 个答案:

答案 0 :(得分: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