2012-10-29 38 views
0

我意識到這可能不是一種有效的選擇,但它目前工作...主要。我遇到的問題是,如果值沒有提交「iminutes」和「dminutes」...我沒有得到任何數據。我認爲如果他們都返回了「0」的值,它會解決這個問題,但不知道如何讓他們這樣做。建議?使用3個子查詢連接進行SQL SELECT語句篩選

SELECT user,total.tuser_id, total.tminutes, 
    total.tminutes-indirect.iminutes AS itminutes, total.tminutes-direct.dminutes AS dtminutes 

FROM 

(SELECT U.user_name AS user,U.user_id AS tuser_id, SUM(M.minutes) AS tminutes 
    From summary S 
    JOIN users U ON U.user_id = S.user_id 
    JOIN tasks TA ON TA.task_id = S.task_id 
    JOIN tcompleted TC ON TC.tcompleted_id = S.tcompleted_id 
    JOIN minutes M ON M.minutes_id = S.minutes_id 
    JOIN hour_interval H ON H.hourinterval_id = S.hourinterval_id 
    WHERE DATE(submit_date) = curdate() 
    AND TIME(submit_date) BETWEEN '00:00:01' and '23:59:59' 
    GROUP BY U.user_id) total 
JOIN 
    (SELECT U.user_id AS iuser_id, SUM(M.minutes) AS iminutes 
    FROM summary S 
    JOIN users U 
    ON U.user_id = S.user_id 
    JOIN minutes M 
    ON M.minutes_id = S.minutes_id 
    JOIN tasks TA 
    ON TA.task_id = S.task_id 
    WHERE TA.task_type='indirect' 
    AND DATE(submit_date) = curdate() 
    AND TIME(submit_date) BETWEEN '00:00:01' and '23:59:59' 
    GROUP BY U.user_id) AS indirect 

ON total.tuser_id = indirect.iuser_id 
JOIN 
    (SELECT U.user_id AS duser_id, SUM(M.minutes) AS dminutes 
    FROM summary S 
    JOIN users U 
    ON U.user_id = S.user_id 
    JOIN minutes M 
    ON M.minutes_id = S.minutes_id 
    JOIN tasks TA 
    ON TA.task_id = S.task_id 
    WHERE TA.task_type='direct' 
    AND DATE(submit_date) = curdate() 
    AND TIME(submit_date) BETWEEN '00:00:01' and '23:59:59' 
    GROUP BY U.user_id) AS direct 

ON total.tuser_id = direct.duser_id 

ORDER BY total.tuser_id 

回答

0

COALESCE將返回提供的第一個非空值。

total.tminutes-COALESCE(indirect.iminutes, 0) 

COALESCE當iminutes爲NULL時,這裏將返回0。你可以在dminutes上做同樣的事情。

您可以檢查MySQL參考手冊http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_coalesce

+0

不幸的是不起作用。因爲它會運行到非空值。基本上,它有一個價值,或者我需要它返回一個「0」。 – Mike

+0

我不確定我是否理解你的評論,如果iminutes爲NULL,'COALESCE'將返回0,如果它非空則iminutes本身。提醒一下,0!= NULL。 – wiill

+0

對不起,是的你是對的! :)我將以一種不同的方式去做這件事,只是做每件事的總和並且減去減法,因爲我不需要它。謝謝! – Mike