【发布时间】:2021-04-21 22:47:08
【问题描述】:
我在 Microsoft SQL Server 数据库中有两个用于呼叫中心的表,fact_queue,其中包含已接收呼叫的数量,以及 dim_interval,用于将间隔号 (0-95) 转换为时间戳 (例如 07:15-07:30)。它是这样设置的,因此您可以轻松更改正在提取的时区数据。
我正在尝试获得一个结果,该结果将显示所有 96 个间隔,无论是否有呼叫,但它没有按预期工作。
以下是表格中的示例:
事实队列
| date_id | queue_id | interval_id | calls_offered |
|---|---|---|---|
| 7780 | 40 | 0 | 1 |
| 7780 | 40 | 2 | 5 |
| 7780 | 40 | 3 | 6 |
| 7780 | 40 | 5 | 10 |
Dim_Interval
| interval_id | interval_name |
|---|---|
| 0 | 00:00 - 00:15 |
| 1 | 00:15 - 00:30 |
| 2 | 00:30 - 00:45 |
| 3 | 00:45 - 01:00 |
| -- | -- |
| 95 | 23:45 - 24:00 |
我已经使用了几个查询变体,我相信以下应该可以工作,但它不是
SELECT dim_interval.interval_name
,fact_queue.offered_calls
FROM dim_interval
RIGHT JOIN fact_queue
ON fact_queue.interval_id = dim_interval.interval_id
WHERE fact_queue.date_id= '7780'
AND fact_queue.queue_id = '40'
ORDER BY dim_interval.interval_id
这只会导致
| interval_name | calls_offered |
|---|---|
| 00:00 - 00:15 | 1 |
| 00:30 - 00:45 | 5 |
| 00:45 - 01:00 | 6 |
| 01:15 - 01:30 | 10 |
但我想要的是
| interval_name | calls_offered |
|---|---|
| 00:00 - 00:15 | 1 |
| 00:15 - 00:30 | null |
| 00:30 - 00:45 | 5 |
| 00:45 - 01:00 | 6 |
| 01:00 - 01:15 | null |
为什么查询不起作用?如果重要的话,我使用的是 DBeaver 版本 21.0.3.202104181339
【问题讨论】:
-
您需要将
left join加入Fact_Queue,在加入时包含where条件。 -
每个
right join都可以表示为left join,应该是这样,因为大多数人觉得它更容易理解
标签: sql-server join dbeaver