Записать шоу Double, когда я использую count с внутренним соединением в Postgresql - PullRequest
0 голосов
/ 31 декабря 2018

Вот мой запрос и данные в таблице

посещаемость_отчет таблица:

empid | status  | day
------+---------+---------
8787  | Off Day | monday
8787  | Off Day | tuesday
8788  | Off Day | wednesday

users_staffuser таблица:

  id |  emp_id 
  ---+----------
   1 |  8787 
   2 |  8788 

users_staffuseroffdays таблица:

id    | staff_user_id | off_days
------+---------------+--------
 1    | 1             | monday
 2    | 1             | tuesday
 3    | 2             | Wednesday

Запрос:

select 
    a.empid,  
    count(case when a.status = 'Off Day' then 1 else 0 end) as off,
    count(case when a.day = 'monday' and uso.off_days = 'monday'  
                  then a.day 
               when a.day = 'tuesday' and uso.off_days = 'tuesday'  
                  then a.day 
               when a.day = 'wednesday' and uso.off_days = 'wednesday'  
                  then a.day 
               when a.day = 'thursday' and uso.off_days = 'thursday'  
                  then a.day 
               when a.day = 'friday' and uso.off_days = 'friday'  
                  then a.day 
               when a.day = 'saturday' and uso.off_days = 'saturday'  
                  then a.day 
               when a.day = 'sunday' and uso.off_days = 'sunday'  
                  then a.day 
           end) as off_days
from 
    attendance_report a 
inner join 
    users_staffuser us on a.empid::varchar = us.emp_id 
inner join 
    users_staffuseroffdays uso on uso.staff_user_id = us.id
where 
    us.emp_id is not null
    and a.empid = '8787'

Мой результат запроса.потому что считать двойное значение.когда в таблице staffuseroffdays есть 1 запись пользователя, тогда показывается правильная запись

empid | off  | off_days
------+------+------------
8787  | 4    | 4
8788  | 1    | 1

Мне нужен этот результат

    empid | off  | off_days
    ------+------+------------
    8787  | 2    | 2
    8788  | 1    | 1

1 Ответ

0 голосов
/ 31 декабря 2018

Я не уверен, что эти два столбца должны рассчитывать.Чтобы узнать количество выходных дней, вам нужно исправить условия объединения и изменить соединения на внешние соединения:

select a.empid, sum( (a.status = 'Off Day')::int ) as off,
from users_staffuser us left join
     attandance_report a 
     on a.empid::varchar = us.emp_id left join
     users_staffuseroffdays uso
     on uso.staff_user_id = us.id and uso.off_days = a.day
where us.emp_id is not null 
group by a.empid;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...