我使用SQL服务器,但我认为它不应该与此相关。 我的查询要复杂得多,但我面临以下挑战: 我想按招聘周数计算招聘的书籍,所以桌子(清理)就像:
Name Week
Book1 1
Book1 1
Book1 2
Book2 2
Book3 1
Book3 1
Book3 2
我需要这个输出:
Name Week Count
Book1 1 2
Book1 2 1
Book2 1 0 <- Not showing
Book2 2 1
Book3 1 2
Book3 2 1
但是我的查询没有显示第2册第1周的计数,因为它没有任何事件。
有没有干净的方法呢?
答案 0 :(得分:1)
如果您的节点可能没有任何数据可以提供给count()
,那么您必须提前确定这些节点(在您的示例中,它看起来像您&#39;有书和周的组合)。然后,您需要cross join
他们在一起,这将形成您的查询的框架框架,作为您想要查看的每个可能的分组,无论是否有数据。从该制造的cte /子查询中,您可以将联接到实际数据,并且这些行的计数为零。
类似
;with books (book) as
(
select 'book1' union all
select 'book2' union all
select 'book3'
), weeks (week) as
(
select 1 union all
select 2 union all
select 3
), skelly as
(
select Book, Week
from books
cross join weeks
)
select book, week, count(1)
from skelly
left outer join <sometable>
on <some join condition>
现在显然我只是把数据提升了。也许你有一个源可以用来动态生成或者oththeise,但这应该让你开始。