0

我有一个看起来像这样的查询:

SELECT
  app.application_id,
  j.job_number,
  j.job_id,
  j.job_title,
  j.job_city,
  j.job_state,
  p.person_id  AS candidate_id,
  p.first_name,
  p.last_name,
  app.start_date,
  ope1.percent_complete,
  MAX(CASE
      WHEN r.role_display_name = 'ENG - Recruiter' THEN
        (SELECT CASE WHEN COUNT(last_name) = 0 THEN
                   'Unassigned'
                 ELSE
                   COUNT(last_name)
                 END AS uname
           FROM users
           JOIN job_roles ON job_roles.user_id = users.user_id
          WHERE job_id = j.job_id
            AND role_id = r.role_id
        )
      ELSE '' END) AS role_3

我的问题是COUNT(last_name)不会返回 0,因为没有返回记录,所以没有NULL. 一切都是有道理的,但是我尝试将其包装在 中IFNULL()ISNULL()但似乎都没有解决这个问题。没有记录时如何让它返回 0?我需要聚合内的另一个子查询吗?COUNT()我真的不想使用另一个子查询....

4

1 回答 1

1

如果正确理解你想要什么,你可以尝试用这种方式重写它

SELECT ...
      ,MAX(CASE WHEN r.role_display_name = 'ENG - Recruiter' 
                THEN COALESCE(NULLIF(
                (
                     SELECT COUNT(last_name) 
                       FROM users JOIN job_roles 
                         ON job_roles.user_id = users.user_id 
                      WHERE job_id = j.job_id 
                        AND role_id = r.role_id
                 ), 0), 'Unassigned')
                ELSE ''
           END) as role_3
       ...
于 2013-08-13T05:06:58.527 回答