TSQL选择和加入问题

问题描述 投票:0回答:2

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

从EMPL开始,基于EMPL.effect_pd <= PAYROLL.payroll_pd,只有一条记录应该从EMPL连接到PAYROLL。

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

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

tsql join where-clause having-clause
2个回答
0
投票

首先 - 欢迎!

您编写了“... FROM EMPL,基于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条独特的记录。

我想,就是这样。最好的祝福


0
投票

经过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 );
© www.soinside.com 2019 - 2024. All rights reserved.