我的第一个表名为 Date_Table,它包含一年中从 2020 年 1 月开始一直到 2030 年 12 月 31 日的所有日期。数据如下所示:
日期 | 日 |
---|---|
2020/01/01 00:00 | 周三 |
2020年2月1日00:00 | 周四 |
我的第二个表Sales_Table由销售阶段组成,每个阶段都有一个到达该阶段时分配的日期。 这是我的数据的样子:
销售_ID | 询问 | 应用程序记录 | 应用通过 | 销售完成 |
---|---|---|---|---|
1 | 2020/01/01 00:00 | 2020年2月1日00:00 | 2020/03/01 00:00 | 2020/05/01 00:00 |
2 | 2020年2月1日00:00 | 2020/03/01 00:00 | 2020/03/01 00:00 | 2020/05/01 00:00 |
到目前为止我的查询是这样的:
SELECT COUNT(CASE WHEN [Enquiry] IS NOT NULL THEN 1
END) AS [Total Enquiries],
COUNT(CASE WHEN [App Rec] IS NOT NULL THEN 1
END) AS [Apps Received],
COUNT(CASE WHEN [App Passed] IS NOT NULL THEN 1
END) AS [Apps Passed],
COUNT(CASE WHEN [Sale Completed] IS NOT NULL THEN 1
END) AS [Completed Sales]
FROM [Date_Table]
LEFT JOIN [Sales_Table] ON [Date] Between [Enquiry] AND [App Rec] GROUP BY [Date]
这对于前 2 个日期似乎工作正常,但如果我在连接中添加另一个 AND 语句,我会收到 SQL 查询解析失败错误。
最终报告将是这样的表格:
日期 | 询问 | 应用程序记录 | 应用通过 | 销售完成 |
---|---|---|---|---|
2020/01/01 00:00 | 3 | 6 | 4 | 2 |
2020年2月1日00:00 | 5 | 1 | 11 | 4 |
我尝试使用 BETWEEN 和 AND 将所有日期字段添加到左连接 像这样:
LEFT JOIN [Sales_Table] ON [Date] Between [Enquiry] AND [App Rec] AND [App Passed] AND [Sale Completed]
这只是给了我一个解析错误
参见示例
with t as(
select 'Enquiry'event,Enquiry as dt
from Sales_Table
union all
select 'App_Rec',App_Rec
from Sales_Table
union all
select 'App_Passed',App_Passed
from Sales_Table
union all
select 'Sale_Completed',Sale_Completed
from Sales_Table
)
,totals as(
select dt
,sum(case when event='Enquiry' then 1 else 0 end)Enquiry
,sum(case when event='App_Rec' then 1 else 0 end)App_Rec
,sum(case when event='App_Passed' then 1 else 0 end)App_Passed
,sum(case when event='Sale_Completed' then 1 else 0 end)Sale_Completed
from t
group by dt
)
select *
from Date_Table d
left join totals t on t.dt=d.date
输出是
日期 | 日 | dt | 询问 | 应用_记录 | 应用_通过 | 销售_已完成 |
---|---|---|---|---|---|---|
2020-01-01 | 周三 | 2020-01-01 | 1 | 0 | 0 | 0 |
2020-01-02 | 周四 | 2020-01-02 | 1 | 1 | 0 | 0 |
2020-01-03 | 弗里德 | 2020-01-03 | 0 | 1 | 2 | 0 |
2020-01-04 | 萨图 | 空 | 空 | 空 | 空 | 空 |
2020-01-05 | 桑德 | 2020-01-05 | 0 | 0 | 0 | 2 |
有测试数据
create table Date_table(Date date, Day varchar(10));
insert into Date_Table ([date]) values
('2020-01-01')
,('2020-01-02')
,('2020-01-03')
,('2020-01-04')
,('2020-01-05')
;
update Date_Table
set [Day]=left(datename(dw,[date]),4)
;
create table Sales_Table (Sale_ID int,Enquiry date,App_Rec date, App_Passed date, Sale_Completed date);
insert into Sales_Table values
(1,'2020-01-01','2020-01-02','2020-01-03','2020-01-05')
,(2,'2020-01-02','2020-01-03','2020-01-03','2020-01-05')
;