2017-02-17 8 views
-2

第一テーブルからいくつかの条件に基づいて、第一及び第二のテーブルから行をフェッチするSQLクエリは、シナリオ

従業員が日常的に給与を取得し、それは日々を変化させます。彼らの仕事も期間によって異なります。

私は2つのテーブルを持っています。 Table Aには、特定の期間の従業員の勤務情報が含まれています。 toDate12/31/9999の場合、それはその従業員がworkIdの積極的な役割にあることを意味します。

Table Bには、すべての日付の特定の仕事の支払い額が含まれています。 table A

、私はtable BemplIdworkIdfromDatetoDate

を持って、私はworkIdpayDatepayAmount

は、我々は(そのtoDateあるアクティブworkIdのために、すべての従業員のpayAmountを照会する必要がいます12/31/9999)を現在の日付まで更新します。

など。 -

表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

ここでは、「SQLでの結合の仕方」のヒント - グーグル検索を行っています – Hogan

+0

膨大な例を小さなものに置き換え、空白行を削除してコードブロックでフォーマットしてください。 – 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