TSQL选择和加入问题

时间:2019-03-06 10:52:56

标签: tsql join where-clause having-clause

我有两个表,EMPL是一个历史员工表,用于跟踪员工税率的变化,而PAYROLL也是一个历史表,其中填充了多个时期的员工薪水。

FROM EMPL,基于EMPL.effect_pd <= PAYROLL.payroll_pd,应仅将一条记录从EMPL连接到PAYROLL。

下面是两个表,查询和结果集。但是,我只希望每个工资期为每个员工提供1条记录,该记录与基于payroll_pd和effect_pd的相关员工记录匹配。

enter image description here
(点击图片放大)

2 个答案:

答案 0 :(得分:0)

首先-欢迎!

您写了“ ... EMROM,基于EMPL.effect_pd <= PAYROLL.payroll_pd ...”,但是您使用PAYROLL而不是EMPL启动SQL。

请先测试此语句:

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条关于女巫的记录。

我认为,就是这样。 最好的问候

答案 1 :(得分:0)

经过三天的代码弄乱之后,我终于找到了解决方案:

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 );