TSQL联接以从表A中获取表B中每个记录的所有记录?

TSQL联接以从表A中获取表B中每个记录的所有记录?,tsql,join,Tsql,Join,我有两张桌子: 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

我有两张桌子:

 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,我需要周期表中的每个周期。如果工作表中没有记录,则“否”值放置在工作字段中

要得到这个结果,TSQL是什么样子的


(注意:如果有帮助,我还可以访问每个员工都有EmpId和LastName的Employee表。出于性能原因,我希望不需要它,但如果我需要它,就可以了。)

您应该能够使用以下功能:

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

请参见

您应该能够使用以下功能:

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

哇,这比我想象的要复杂得多。我一直在想,今天早上我的努力中遗漏了一两个关键词,有人的回应会让我走上正轨。这根本不是我所期望的。@SailingJudo的关键是首先为每个员工分配
时段,然后才能获得工作细节。:)哇,这比我想象的要复杂得多。我一直在想,今天早上我的努力中遗漏了一两个关键词,有人的回应会让我走上正轨。这根本不是我所期望的。@SailingJudo的关键是首先为每个员工分配
时段,然后才能获得工作细节。:)