Sql server 如何执行表的自连接,以使少数变量在不同条件下分组

Sql server 如何执行表的自连接,以使少数变量在不同条件下分组,sql-server,left-join,Sql Server,Left Join,我必须生成一份报告,提供每个来源的客户数量。但是,由于一些源必须根据不同的日期条件进行分组,因此我将运行相同的查询两次。我有一种方法可以自我连接,这样我就可以在一个查询中获得报告 JCS表如下所示: JCS表结构 Card_no Source, Branch, Bill_date etc etc etc 1A1 ABC AA '2019-09-01' 1A2 ABC AA '2019-09-01' 1A3

我必须生成一份报告,提供每个来源的客户数量。但是,由于一些源必须根据不同的日期条件进行分组,因此我将运行相同的查询两次。我有一种方法可以自我连接,这样我就可以在一个查询中获得报告

JCS表如下所示: JCS表结构

Card_no  Source, Branch,     Bill_date  etc     etc     etc
1A1       ABC      AA     '2019-09-01'
1A2       ABC      AA     '2019-09-01' 
1A3       PQR      CC     '2019-09-01'
1A4       STO      CC     '2019-09-01'
1A5       STO      DD     '2019-09-02'
2A1       PQR      BB     '2019-09-01'
2A2       PDR      BB     '2019-09-03'
2A3       PDR      DD     '2019-09-01'
2A4       ABC      CC     '2019-09-01'
有许多列和数千行,但上面4列是感兴趣的列。第一列卡号是唯一的,来源告诉我们客户来自哪里,分行是他们访问过的门店,账单日期是账单日期。 任何来源都可以转到任何分支。因此,每个源都将尝试所有可用的分支

所需要的很简单:

select Source, count(*) from JCS.
但需要做的是,某些分支机构的计数需要在9月1日之后进行。因此,我使用的两个查询是:

select Source, count(*) from JCS
where Branch not in ('AA','CC')
结果:

Source  Count
ABC      40 
PQR      36
STO      19
..       .. 
Source  Count
STO      42 
PQR      36
..       ..
..       .. 
以及:

结果:

Source  Count
ABC      40 
PQR      36
STO      19
..       .. 
Source  Count
STO      42 
PQR      36
..       ..
..       .. 
我是否可以编写一个连接,以便使用单个查询获得所需的输出

Select a.source, count(a.source) + count(b.source) [Total_Customers]
from JCS a LEFT JOIN JCS b on a.source = b.source 
and a.card_no != b.card_no
where a.Branch not in ('AA','CC') and b.Branch in ('AA','CC') and 
day(b.Bill_date) > 1
group by a.source

我知道在我上面的查询中会有很多重复,是否有其他方法可以完成任务,或者我需要坚持使用上面的两个查询?

这将提供您所需的输出

SELECT Source, COUNT(CASE WHEN Branch NOT IN ('AA','CC') THEN 1 
  WHEN Branch in ('AA','CC') and day(Bill_date) > 1 THEN 1 ELSE NULL END)  
FROM JCS
GROUP BY Source