2017-07-24 58 views
0

我有一個表中有大量小時花費的條目。我試圖根據日期的某些特徵花費數小時。我的查詢將與此任務競爭,但如果某個日期的特定特徵集沒有值,則該日期將不會返回任何數據。如果我使用不同的連接類型加入表,我知道如何解決這個問題,但當連接處於where語句時,我不知道該怎麼做。加入子查詢和丟失數據

SELECT 
t1.dates, 
t1.hours1, 
t2.hours2, 
t3.hours3, 
t4.hours4 

FROM 
    (
     SELECT 
     dates, 
     SUM(times) AS hours1 
     FROM mytable 
     WHERE 
     characterisics1 
     GROUP By dates 
    ) t1, 
    (
     SELECT 
     dates, 
     SUM(times) AS hours2 
     FROM mytable 
     WHERE 
     characterisics2 
     GROUP By dates 
    ) t2, 
    (
     SELECT 
     dates, 
     SUM(times) AS hours3 
     FROM mytable 
     WHERE 
     characterisics3 
     GROUP By dates 
    ) t3, 
    (
     SELECT 
     dates, 
     SUM(times) AS hours4 
     FROM mytable 
     WHERE 
     characterisics4 
     GROUP By dates 
    ) t4 

WHERE 
t1.dates = t2.dates and t1.dates = t3.dates and t1.dates = t4.dates 

ORDER BY 
t1.dates DESC 
+0

請不要使用隱式聯接。他們是一種很差的編程技術。 – HLGEM

回答

3

使用條件聚合。 。 。如此簡單:

SELECT dates, 
     SUM(CASE WHEN characterisics1 THEN times ELSE 0 END) AS hours1, 
     SUM(CASE WHEN characterisics2 THEN times ELSE 0 END) AS hours2, 
     SUM(CASE WHEN characterisics3 THEN times ELSE 0 END) AS hours3, 
     SUM(CASE WHEN characterisics4 THEN times ELSE 0 END) AS hours4, 
     SUM(CASE WHEN characterisics5 THEN times ELSE 0 END) AS hours5 
FROM mytable 
GROUP By dates;