TSQL выбрать и присоединиться к вопросу - PullRequest
0 голосов
/ 06 марта 2019

У меня есть две таблицы: EMPL, которая является исторической таблицей сотрудников, для отслеживания изменений в налоговой ставке сотрудника, и PAYROLL, которая также является исторической таблицей, заполненной заработной платой сотрудников за несколько периодов.

ИЗ EMPL, на основе EMPL.effect_pd <= PAYROLL.payroll_pd, только одна запись должна быть присоединена из EMPL в PAYROLL. </p>

Ниже приведены две таблицы: запрос и набор результатов. Тем не менее, я хочу только 1 запись для каждого сотрудника за период оплаты, которая соответствует соответствующей записи сотрудника на основе payroll_pd и effect_pd.

enter image description here
(Щелкните изображение, чтобы увеличить)

Ответы [ 2 ]

0 голосов
/ 14 марта 2019

После 3 дней возни с кодом, я наконец-то пришел к решению:

SELECT * FROM PAYROLL p 
LEFT JOIN EMPL e on p.empl_id = e.empl_id 
WHERE e.rec_id = ( SELECT TOP 1 c.rec_id 
               FROM EMPL c 
               WHERE c.empl_id = p.empl_id 
                  AND p.payroll_pd >= c.effect_pd 
               ORDER BY c.effect_pd DESC );
0 голосов
/ 06 марта 2019

прежде всего - добро пожаловать!

Вы написали "... ИЗ EMPL, основываясь на EMPL.effect_pd <= PAYROLL.payroll_pd ...", но вы запускаете SQL с PAYROLL, а не с EMPL. </p>

Сначала проверьте это утверждение:

SELECT
    E.rec_id
    ,E.empl_id
    ,E.empl_name
    ,E.tax_rate
    ,E.effect_pd
    ,P.rec_id
    ,P.payroll_pd
    ,P.empl_id
    ,P.pd_pay
FROM
    empl AS E
LEFT OUTER JOIN
    payroll AS P
ON      E.empl_id = P.empl_id
    AND E.effect_pd < P.payroll_pd

После этого вы получаете 7 уникальных записей.

Я думаю, вот и все. С наилучшими пожеланиями

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...