SQL Query根据第1个表中的某些条件从第1个和第2个表中获取行

时间:2017-02-17 19:42:11

标签: sql relational-database sybase sybase-iq

方案

员工每天都会获得薪水,而且每天都有所不同。他们的工作也有不同的时期。

我有两张桌子。 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 个答案:

答案 0 :(得分:0)

只需将A和B连接在一起,在where子句或内部连接中,只需确保A的toDate大于当前日期。

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