1

我有两张桌子:

 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 回答