使用一个查询进行多次计数,同时还考虑“计数不同”

时间:2016-09-06 13:08:32

标签: sql sql-server

嘿我不知道这是否可能,但是我正在尝试获得一系列具有不同客户数量的商店,然后尝试计算每个商店的另外两个列,以确定此约会是否为初始或者随后的约会...这是我所拥有的。

SELECT year,
shopname,
COUNT (DISTINCT appointmentkey) custappoint,
SUM (CASE WHEN attendance = 'initial' THEN 1 ELSE 0 END) initialapp,
SUM (CASE WHEN attendance = 'subsequent' THEN 1 ELSE 0 END) subapp
   FROM shoptable
     WHERE shopType in ('local')
     GROUP BY year, shopname
     ORDER BY year, shopname

在约会期间,可能会发生各种各样的事情,在我们的数据库中,这是使用一个约会密钥在各行上编码的。这意味着,对于一次约会,约会键会多次出现,因此上面的代码会计算满足该条件的行数,并给出一个类似的表格。

shopname | custappoint | initialapp | subapp

-------- | ----------- | ---------- | ------

 local1  |    44       |   48       | 89

期望的结果是初始和后续约会的总和应该等于总约会的数量。我试图在计数时添加“明显”的情况,但不要认为这是正确的路线。虽然我确信有人必须有类似的实例,但我在网上找不到类似的东西,所以转向你们!

由于

1 个答案:

答案 0 :(得分:0)

如果每个appointmentkey只能有一个attendance值,那么您只需从不同行的派生表中进行选择:

SELECT year,
shopname,
COUNT (appointmentkey) custappoint,
SUM (CASE WHEN attendance = 'initial' THEN 1 ELSE 0 END) initialapp,
SUM (CASE WHEN attendance = 'subsequent' THEN 1 ELSE 0 END) subapp
FROM (
   SELECT DISTINCT year, shopname, appointmentkey, attendance
   FROM shoptable
     WHERE shopType in ('local')
     GROUP BY year, shopname
     ORDER BY year, shopname
) t