这可能不是问题的最佳描述,但我们走了。
所以我有一些看起来像这样的数据,请注意,对于Schoolhouse项目,Tom只有12/4&的条目。 12/8而对于泳池项目,他在25日之前有一个入口。
Consultant Project PM Week Hours
Tom Schoolhouse Sue 12/4/2016 4
Tom Schoolhouse Sue 12/11/2016 6
Tom Pool Joe 12/4/2016 9
Tom Pool Joe 12/11/2016 8
Tom Pool Joe 12/18/2016 12
Tom Pool Joe 12/25/2016 3
我正在寻找一个查询,我可以在所有项目的整个范围内输出行。理想情况下,结果看起来像这样
Consultant Project PM Week Hours
Tom Schoolhouse Sue 12/4/2016 4
Tom Schoolhouse Sue 12/11/2016 6
Tom Schoolhouse Sue 12/18/2016 0
Tom Schoolhouse Sue 12/25/2016 0
Tom Pool Joe 12/4/2016 9
Tom Pool Joe 12/11/2016 8
Tom Pool Joe 12/18/2016 12
Tom Pool Joe 12/25/2016 3
现在这里是踢球者...我在一个我有限制SQL功能的系统中编写这个查询。我不能使用函数或游标或变量。我只能写一个基本的SQL语句。我确实试图找出一些东西,我填写了一张桌子,里面有我需要的范围,然后加入到这张桌子中,但它并没有像我期望的那样工作。
答案 0 :(得分:2)
试试这个:
select d.Consultant, p.Project,
d.PM, w.Week, isnull(d.Hours, 0) hours
From
(Select distinct project from mytable) p
cross join
(Select distinct week from myTable) w
left join mytable d
on d.project = p.Project
and d.week = w.week
如果顾问和pm依赖于Project,那么:
select p.Consultant, p.Project,
p.PM, w.Week, isnull(d.Hours, 0) hours
From
(Select distinct Consultant, project, PM from mytable) p
cross join
(Select distinct week from myTable) w
left join mytable d
on d.project = p.Project
and d.week = w.week
答案 1 :(得分:2)
查尔斯的想法是正确的,但你需要包括正确的列并从正确的表中选择:
select t.Consultant, t.Project, t.PM, w.Week,
coalesce(t.Hours, 0) as hours
From (Select distinct Consultant, Project, PM from t) cpp cross join
(Select distinct week from t) w left join
t
on t.consultant = cpp.consultant and .project = cpp.Project and
t.PM = cpp.PM and t.week = w.week;