mysql - 如何在连接未找到任何现有值的情况下显示 NULL 值?

标签 mysql sql database jira

如何在连接未找到任何现有值的情况下显示 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/

相关文章:

php - SQL QUERY 没有得到我期望的结果

php - 如何在数据模型中处理用户组和单个用户

json - 使用 Codable Protocol 或外部工具进行 JSON 映射

MySQL:当表中有2个 `Unique Key`时,是否必须创建 `Primary Keys`?

c# - 更新数据库上的插入值不正确 - MVC

mysql - 在 MySQL 中使用登录时间戳统计活跃用户

sql - 我可以试运行/沙盒 sql 命令吗?

sql - to_char函数在Hibernate中引发异常

c# - 命名空间 'DataSetExtensions' 中不存在类型或命名空间名称 'System.Data'(是否缺少程序集引用?)

mysql - sql : Side effects of creating/deleting databases and tables on the fly