一张表中不同日期发生次数的 SQL 计数

问题描述 投票:0回答:1

在 SQL 中,我需要计算交易传递给销售人员的日期、会议日期、合同签署日期以及合同总和的出现次数。

所有这些数据都位于一个表中,并以唯一 ID 作为主键 (PK)。

挑战在于我需要按月获取每个日期的计数,而不直接使用任何日期进行分组。这是因为直接按任何这些日期进行分组都会导致按该特定日期进行计数。

例如,如果某人在一月份开会,而我们按会议日期分组,则我们不会捕获他们在二月份的合同,等等。

我应该如何处理这个问题?”

我尝试过合并日期,还创建日期数组和交叉连接,但后来我在聚合方面遇到了问题,我想知道它应该正确完成。

sql google-bigquery
1个回答
0
投票
    create table sales
(
    uniqueid  int  not null identity(1,1),
    dealdate date,
    salespersonid int,
    meetingdate date,
    contractsigningdate date,
    contractAmt numeric(12,2)
);
insert into sales values ('2023-01-01',1,'2023-02-01','2023-03-01',10000)
insert into sales values('2023-01-02',  1,  '2023-01-07','2023-01-18',  10001)
insert into sales values('2023-01-03','1','2023-01-08','2023-01-19',10002)
insert into sales values('2023-01-04','1','2023-01-09','2023-01-20',10003)
insert into sales values('2023-01-05','1','2023-01-10','2023-01-21',10004)
insert into sales values('2023-01-06','1','2023-01-11','2023-01-22',10005)
insert into sales values('2023-01-01','2','2023-01-12','2023-01-23',10000)
insert into sales values('2023-01-02','2','2023-01-13','2023-01-24',10001)
insert into sales values('2023-01-03','2','2023-01-14','2023-01-25',10002)
insert into sales values('2023-01-04','2','2023-01-15','2023-01-26',10003)
insert into sales values('2023-01-05','2','2023-01-16','2023-01-27',10004)
insert into sales values('2023-01-06','2','2023-01-17','2023-01-28',10005)



select salespersonid,s.month,sum(dealcount)dealcount,sum(meetingcount)meetingcount,sum(contractcount)contractcount,sum(contractamt)contractamt from (
    select salespersonid, MONTH(dealdate)month,count(dealdate)dealcount,0 meetingcount,0 contractcount,0 contractamt from sales
    group by salespersonid,MONTH(dealdate)
    union all 
    select salespersonid,month(meetingdate)month,0,count(meetingdate),0,0 contractamt from sales
    group by salespersonid,month(meetingdate)
    union all 
    select salespersonid,month(contractsigningdate)month,0 ,0,count(contractsigningdate),sum(contractAmt) from sales
    group by salespersonid,month(contractsigningdate) 
) S
group by salespersonid,S.month
© www.soinside.com 2019 - 2024. All rights reserved.