Sql server 如何执行表的自连接,以使少数变量在不同条件下分组
我必须生成一份报告,提供每个来源的客户数量。但是,由于一些源必须根据不同的日期条件进行分组,因此我将运行相同的查询两次。我有一种方法可以自我连接,这样我就可以在一个查询中获得报告 JCS表如下所示: JCS表结构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
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