【发布时间】:2018-07-02 14:37:30
【问题描述】:
我有 3 张桌子
- KALENDER - 此表包含一年的日历以及我们不工作的日子
- GEOPERS - 此表包含人员数据及其唯一用户名
- GEOTIKKINGEN - 此表包含时间戳(某人使用其徽章进入房间的日期和时间)
我正在尝试获取一个查询以返回如下值:
------------------------------------------------------------
| Date | Username | Badge timestamp |
------------------------------------------------------------
| 01-jan-2018 | Steve | null |
| 01-jan-2018 | Peter | 01-01-2018T08:25:21 |
| 01-jan-2018 | Sasha | null |
| 02-jan-2018 | Steve | null |
| 02-jan-2018 | Peter | null |
| 02-jan-2018 | Sasha | null |
| 03-jan-2018 | Steve | 03-01-2018T12:01:20 |
| 03-jan-2018 | Peter | 03-01-2018T06:39:01 |
| 03-jan-2018 | Sasha | 03-01-2018T09:11:15 |
------------------------------------------------------------
查询应该显示表 Kalender 中的每个值和表 GeoPers 中的每个人的结果,然后显示他们的徽章时间戳,如果不是则为 NULL
目前为止:
select
k.datum, isnull(gp.name,null), isnull(gt.DateTimeLocal,null)
from
Kalender k
left outer join
GeoTikkingen gt on CAST(k.datum as DATE) = CAST(gt.DateTimeLocal as DATE)
left outer join
GeoPers gp on gp.name = gt.UserName
order by
k.datum asc, gp.name asc
但是当用户在特定日期没有标记时,它不会返回 NULL
我应该能够拥有 Kalender 中所有值和 GeoPers 中所有值的列表,如果不是 NULL,它们是否带有标记,然后时间戳
请帮忙:-)
【问题讨论】:
-
您将需要在 kalendar 和 geopers 之间进行完全外连接,而不是左连接。
-
ISNULL 函数是多余的,因为无论如何你都分配了 NULL。
标签: sql sql-server outer-join