如何在连接未找到任何现有值的情况下显示 NULL 值?
SELECT u.display_name Associate
, ROUND(SUM(CASE WHEN w.startdate BETWEEN NOW() AND NOW() + INTERVAL 30 DAY THEN w.timeworked END/3600)) '30 Days'
, ROUND(SUM(CASE WHEN w.startdate BETWEEN NOW() AND NOW() + INTERVAL 60 DAY THEN w.timeworked END/3600)) '60 Days'
, ROUND(SUM(CASE WHEN w.startdate BETWEEN NOW() AND NOW() + INTERVAL 90 DAY THEN w.timeworked END/3600)) '90 Days'
FROM worklog w
JOIN cwd_user u
ON u.user_name = w.author
JOIN cwd_membership m
ON m.directory_id = u.directory_id
AND m.lower_child_name = u.lower_user_name
WHERE m.membership_type = 'GROUP_USER'
AND m.lower_parent_name = 'atl_servicedesk_it_agents'
AND w.startdate BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 90 DAY)
GROUP
BY u. display_name
ORDER
BY u.last_name;
所以在加入 u.user_name = w.author
时,我想在有 u.user_name
的地方显示所有值,即使没有 >w.作者
。 display_name
仍应显示,但 40、60 和 90 天的值将为 NULL。理想情况下,我想将 NULL 更改为 0。用户不会出现在工作日志表中,除非他们已经记录了工作,所以现在它只为两个有记录的人显示两行。我仍然想向 m.lower_parent_name = 'atl_servicedesk_it_agents'
中存在的每个人展示他们没有记录任何内容。
有人有什么想法吗?
最佳答案
您可以使用LEFT JOIN
,但您需要注意所有连接和WHERE
条件:
SELECT u.display_name as Associate,
ROUND(SUM(CASE WHEN w.startdate BETWEEN NOW() AND NOW() + INTERVAL 30 DAY THEN w.timeworked END/3600)) as `30 Days`,
ROUND(SUM(CASE WHEN w.startdate BETWEEN NOW() AND NOW() + INTERVAL 60 DAY THEN w.timeworked END/3600)) as `60 Days`,
ROUND(SUM(CASE WHEN w.startdate BETWEEN NOW() AND NOW() + INTERVAL 90 DAY THEN w.timeworked END/3600)) as `90 Days`
FROM cwd_user u JOIN -- Not sure if this should be LEFT JOIN or not
cwd_membership m
ON m.directory_id = u.directory_id AND
m.lower_child_name = u.lower_user_name AND
m.membership_type = 'GROUP_USER' AND
m.lower_parent_name = 'atl_servicedesk_it_agents' LEFT JOIN
worklog w
ON u.user_name = w.author AND
w.startdate BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 90 DAY)
GROUP BY u. display_name
ORDER BY u.last_name;
我不确定 m
的连接应该是内部连接还是左连接。这取决于您是否也希望基于该表进行过滤。
关于mysql - 如何在连接未找到任何现有值的情况下显示 NULL 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42426661/