我尝试使用“WHERE”进行过滤,但我希望将过滤后的行显示为“NULL”或0而不是隐藏它们。
这是我的代码:
SELECT *, IFNULL(SUM(ROUND(TIMESTAMPDIFF(MINUTE,start,end)/60,1)),0) urlaub
FROM time_entries e
LEFT JOIN users u ON e.user_id = u.id
WHERE e.project_id = 10 AND YEAR(end) = YEAR(CURRENT_DATE)
GROUP BY e.user_id
最佳, 克里斯
答案 0 :(得分:0)
我可能只是迂腐,但万一有真正的误解......他们不是“隐藏”,他们不在那里。 WHERE的要点是选择要检索的记录,以便在只有少量数据记录相关时不检索整个表内容。
但是如果你想做的事情就是这样,你应该能够添加另一个结果字段,如下所示:
(e.project_id = 10 AND YEAR(end) = YEAR(CURRENT_DATE)) AS relevantRecord
答案 1 :(得分:0)
搞定了!这是返回我想要的代码:
SELECT
*,
IFNULL(SUM(CASE WHEN e.project_id = 10 AND YEAR(end) = YEAR(CURRENT_DATE) THEN ROUND(TIMESTAMPDIFF(MINUTE, start, end)/60,1) ELSE 0 END),0) AS urlaub
FROM time_entries e
LEFT JOIN users u ON e.user_id = u.id
GROUP BY e.user_id
谢谢!