2017-10-04 13 views
1

のため欠席レコードの値を取得します。私は2つのテーブルを持っている各従業員

表1 - EmployeeCommitment このテーブルには、従業員の時間のコミットメントの割合を示します。

列:

  • :彼らが自分の時間をコミットした日付。
  • 従業:従業員のユーザー名
  • コミットメント:例えば20%は表2

従業員が仕事に日々の時間の20%をコミットすることを計画していることを意味 - カレンダー この表は、基本的には、今年の各曜日の行とカレンダーです。

列:

  • Calendar_Date
  • を含める:この日付が営業日であるか否かを示すバイナリ列(例えば日が週末であるか、値を休日の場合は0で、それ以外の場合は1)

EmployeeCommitment表には、従業員が何のCを持っていない日が含まれていません誰かが仕事をしてくれると新しい行しか得られないので、かなり合理的です。

しかし、私が望むものは、従業員が何の仕事もしていないと考えている行を毎日取得することです。例えば。従業員john.smithが今週3日(montuewed)のコミットメントを得た場合、彼はthufriの2つの行を追加する必要があります(これは休日のない通常の週です)。今週は合計5行になります。

私はこの

SELECT * FROM Calendar c LEFT JOIN EmployeeCommitment e ON c.Calendar_Date=EmployeeCommitment.Date 

のような2つのテーブルを結合するために試してみました。しかし、これは、JOINは右に私のテーブルのnull列を与え、彼らが属する従業員を知る方法はありません。

答えて

2

cross joinを使用してすべての行を生成し、必要な情報を入力する必要があります。 。 。たとえば、left join

SELECT c.*, e.employee, COALESCE(ec.commitment, 0) as commitment 
FROM Calendar c CROSS JOIN 
    (SELECT DISTINCT Employee FROM Employees e) e LEFT JOIN 
    EmployeeCommitment ec 
    ON c.Calendar_Date = ec.Date AND 
     e.Employee = ec.Employee; 
+0

をご利用いただきありがとうございます。テストしてすぐにあなたに戻ってきてください。 – Disasterkid

+0

は魅力的に機能します。ありがとうございました! – Disasterkid

関連する問題