【发布时间】:2014-06-11 16:59:39
【问题描述】:
我有两个包含客户 ID 的表。一个表 (TABLE_B) 包含合同和服务信息,如 Spells for clients,另一个表 (TABLE_A) 包含学校出勤信息,如 对客户的评估。两个表都包含重复的客户端 ID,并且仅通过拼写和评估 ID 不同。并非 TABLE_B 中的所有客户端都在 TABLE_A 中,但 TABLE_A 中的所有客户端都在 TABLE_B 中。
我希望查询生成一个数据集,该数据集列出了所有客户端(来自 TABLE_B),并在评估日期落在拼写打开和关闭日期内时加入。并非所有法术都已关闭。
下面的查询失败,因为它没有包含所有的客户记录——在 TABLE_A 中没有找到客户 ID 的记录被省略,并且数据集不包含 TABLE_B 中的所有客户 ID。我该如何解决这个问题?
SELECT
B.[Agency]
,B.[Contract#]
,B.[total spells]
,B.[spell open date]
,B.[spell close date]
,B.[spell ID]
,B.[Class Level]
,B.[Spec Pop]
,B.[client_id]
,A.[client_id]
,A.[e_due_date]
,A.[scheduled]
,A.[attended]
FROM [PAK].[dbo].[TABLE_B] B
LEFT JOIN [PAK].[dbo].[[TABLE_A] A ON A.[client_id]=B.[client_id]
WHERE A.[e_due_date]>=B.[spell open date] AND (A.[e_due_date]<=B.[spell close date] OR B.[spell close date] IS NULL)
【问题讨论】:
-
WHERE语句的第一部分通过要求 B 中的值过滤掉第二个表中的任何非空记录。[拼写打开日期] -
添加 OR B.[spell open date] IS NULL 可以解决这个问题吗?
标签: sql sql-server date left-join where