Получить сведения о несгруппированных столбцах в значениях, разделенных запятыми, в Sql -Server - PullRequest
0 голосов
/ 11 февраля 2020

Я хочу получить отпуск сотрудников, чья сумма lvdays больше 30 со всеми тремя данными таблицы. Не может найти выход для этого.

сотрудник:

empcode| MNGR_CODE| MNGR_CODE2
-------|----------|-----------
AA     |   bb     |     cc 
FF     |   bb     |     cc

lvtype:

typeid| desc
------|---------
1     | casual

отпуск:

leaveid| empcode| lvdays| typeid| Flag| date      | reason 
-------|--------|-------|-------|-----|-----------|---------
1      |  AA    | 2     |    1  |  1  | 11-02-2020| NULL 
2      |  AA    | 3     |    1  |  1  | 02-11-2019| NULL
3      |  FF    | 4     |    1  |  1  | 23-12-2019| NULL

Здесь это запрос, который я пытаюсь построить, но не могу достичь цели.

SELECT MNGR_CODE,
       MNGR_CODE2,
       lt.desc,
       l.reason,
       l.leaveID
FROM Leave l
     INNER JOIN lvtype lt ON l.typeid = lt.typeid
     LEFT OUTER HASH JOIN employee em ON em.Emp_Code = l.empcode
WHERE empcode IN ('AA', 'FF')
  AND leaveID IN (SELECT leaveID
                  FROM Leave l
                       INNER JOIN lvtype lt ON l.typeid = lt.typeid
                  WHERE l.empcode IN ('AA', 'FF')
                  GROUP BY l.empcode
                  HAVING SUM(lvdays) > 30);

1 Ответ

2 голосов
/ 11 февраля 2020

Если Я следовал за вами правильно, вы могли бы использовать оконные функции:

select *
from (
    select 
        e.mngr_code,
        e.mngr_code2,
        lt.desc, 
        l.reason,
        l.leaveid,
        sum(l.lvdays) over(partition by e.empcode) sum_lvdays
    from leave l 
    inner join lvtype lt on l.typeid = lt.typeid 
    inner join employee em on em.emp_code = l.empcode
) t
where sum_lvdays > 30

Подзапрос основан на вашем существующем запросе и добавляет дополнительный столбец, в котором сумма окон равна все листья каждого сотрудника. Внешний запрос использует результаты суммы окна в качестве фильтра.

Я не уверен, что вам нужно left join в подзапросе, поэтому я изменил его на inner join.

...