1

私は2つのテーブルを持っています:

 PeriodId  Period   (Periods Table)
 --------  -------
 1         Week 1
 2         Week 2
 3         Week 3


 EmpId  PeriodId  ApprovedDate  (Worked Table)
 -----  --------  ------------
 1      1         Null
 1      2         2/28/2013
 2      2         2/28/2013

私はこれをもたらすクエリを書き込もうとしています:

 EmpId  Period    Worked     ApprovedDate
 -----  --------  ---------  ------------
 1      Week 1    Yes        Null
 1      Week 2    Yes        2/28/2013
 1      Week 3    No         Null
 2      Week 1    No         Null
 2      Week 2    Yes        2/28/2013
 2      Week 3    No         Null

アイデアは、各EmpのPeriodsテーブルから各Periodが必要であるということです。Workedテーブルにレコードがなかった場合、「No」の値が「Worked」フィールドに配置されます。

この結果を得るためのTSQLはどのように見えますか?

(注:役立つ場合は、各従業員のEmpIdとLastNameを持つEmployeeテーブルにもアクセスできます。パフォーマンス上の理由から、これは必要ないことを望んでいますが、必要な場合はそうしてください。)

4

1 に答える 1

4

以下を使用できるはずです。

select p.empid,
  p.period,
  case 
    when w.PeriodId is not null 
    then 'Yes' 
    else 'No' End Worked,
  w.ApprovedDate
from
(
  select p.periodid, p.period, e.empid
  from periods p
  cross join (select distinct EmpId from worked) e
) p
left join worked w
  on p.periodid = w.periodid
  and p.empid = w.empid
order by p.empid

デモで SQL Fiddle を参照してください

于 2013-02-25T22:24:17.897 に答える