2017-02-17 81 views
-2

方案SQL查询,从第1表中提取根据一些条件从第一和第二表行

员工获得每日基础上的工资和它不同的日常。他们的工作也随时间而变化。

我有两个表。 Table A包含特定时期的员工的工作信息。如果toDate12/31/9999,这意味着员工在为workId积极的作用。

Table B包含特定工作的所有日期的支付量。

table A,我有emplIdworkIdfromDatetoDate

table B,我有workIdpayDatepayAmount

我们必须查询所有员工的payAmount用于有源workId(其toDate12/31/9999)直到当前日期。

E.g. -

表A

+--------+--------+------------+------------+ 
| emplId | workId | fromDate | toDate  | 
+--------+--------+------------+------------+ 
| 1  | 123 | 01/01/2017 | 01/05/2017 | 
| 2  | 456 | 01/01/2017 | 12/31/9999 | *** 
| 1  | 123 | 01/06/2017 | 01/11/2017 | 
| 3  | 123 | 01/01/2017 | 12/31/9999 | *** 
+--------+--------+------------+------------+ 

表B

+--------+------------+-----------+ 
| workId | payDate | payAmount | 
+--------+------------+-----------+ 
| 123 | 01/01/2017 | 11  | 
| 123 | 01/02/2017 | 15  | 
| 123 | 01/03/2017 | 10  | 
| 123 | 01/04/2017 | 10  | 
| 123 | 01/05/2017 | 7   | 
| 123 | 01/06/2017 | 23  | 
| 123 | 01/07/2017 | 57  | 
| 123 | 01/08/2017 | 10  | 
| 123 | 01/09/2017 | 13  | 
| 123 | 01/10/2017 | 11  | 
| 123 | 01/11/2017 | 9   | 
| 456 | 01/01/2017 | 11  | 
| 456 | 01/02/2017 | 15  | 
| 456 | 01/03/2017 | 10  | 
| 456 | 01/04/2017 | 10  | 
| 456 | 01/05/2017 | 7   | 
| 456 | 01/06/2017 | 23  | 
| 456 | 01/07/2017 | 57  | 
| 456 | 01/08/2017 | 10  | 
| 456 | 01/09/2017 | 13  | 
| 456 | 01/10/2017 | 11  | 
| 456 | 01/11/2017 | 9   | 
+--------+------------+-----------+ 

合力表C

+-------+--------+------------+-----------+ 
| empId | workId | payDate | payAmount | 
+-------+--------+------------+-----------+ 
| 2  | 456 | 01/01/2017 | 11  | 
| 2  | 456 | 01/02/2017 | 15  | 
| 2  | 456 | 01/03/2017 | 10  | 
| 2  | 456 | 01/04/2017 | 10  | 
| 2  | 456 | 01/05/2017 | 7   | 
| 2  | 456 | 01/06/2017 | 23  | 
| 2  | 456 | 01/07/2017 | 57  | 
| 2  | 456 | 01/08/2017 | 10  | 
| 2  | 456 | 01/09/2017 | 13  | 
| 2  | 456 | 01/10/2017 | 11  | 
| 2  | 456 | 01/11/2017 | 09  | 
| 3  | 123 | 01/01/2017 | 11  | 
| 3  | 123 | 01/02/2017 | 15  | 
| 3  | 123 | 01/03/2017 | 10  | 
| 3  | 123 | 01/04/2017 | 10  | 
| 3  | 123 | 01/05/2017 | 7   | 
| 3  | 123 | 01/06/2017 | 23  | 
| 3  | 123 | 01/07/2017 | 57  | 
| 3  | 123 | 01/08/2017 | 10  | 
| 3  | 123 | 01/09/2017 | 13  | 
| 3  | 123 | 01/10/2017 | 11  | 
| 3  | 123 | 01/11/2017 | 9   | 
+-------+--------+------------+-----------+ 

请与帮助查询。

+1

尝试新鲜事物了吗? – GurV

+1

这里是一个暗示 - 谷歌搜索 – Hogan

+0

通过较小的,请更换您的巨大实例“如何使一个在SQL连接”,通过代码块中删除空行和格式。 – philipxy

回答

0

刚刚加入A和B在一起,并在where子句中或在内部联接只要确保A的TODATE比当前日期。

select * 
from tableA A 
inner join tableB B on A.workId = B.workId 
         and A.toDate > getdate() 
+1

你的意思是todate = 12/31/9999 – Hogan

相关问题