SQL Group By Count All Groups

时间:2017-01-20 23:01:56

标签: sql-server

我使用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周的计数,因为它没有任何事件。

有没有干净的方法呢?

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,但这应该让你开始。