换个逻辑 with cte as (select * from b union all select * from c) 然后在这个表里面进行查询。就都有了。 ------解决思路----------------------
select * from A LEFT JOIN C ON A.员工Code=C.员工Code WHERE 调整时间>='2014-08-01' AND 调整时间<'2014-09-01'
你的意思是这个吗?
额,关键你不知道该连哪个表
如果8月份之后某个员工的工资没有被调整,那么他的工资数据就还在表B里面,而C里面是查不到的
那就先把两张表UNION ALL 起来,可以吗? SELECT * FROM B UNION ALL SELECT * FROM C 把这个当成上面那个语句里的C来查~~ ------解决思路----------------------
WITH D AS ( -- 先选出到8月份为止的调整数据(假定调整时间为8月份的工资在9月起效) SELECT * FROM B WHERE 调整时间 < '2014-08-01' UNION ALL SELECT * FROM C WHERE 调整时间 < '2014-08-01' ), E AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY 员工code ORDER BY 调整时间 DESC) n FROM D ), F AS ( -- 选出离8月份最近的调整数据 SELECT 员工code,金额,调整时间 FROM E WHERE n = 1 ) SELECT A.企业code, A.员工code, F.金额 AS '工资' FROM A JOIN F ON F.员工code = A.员工code WHERE ...