SQL查询包括与Null关联的元素

时间:2014-04-10 19:46:22

标签: sql

我不确定如何标题这个问题,我正在尝试构建一个返回a的查询 计数

  1. 在给定的时间范围内
  2. 用于我使用IN列表定义的特定建筑物
  3. 即使在该时间范围内没有请求,我也总是希望所有建筑物都出现。 示例可能如下所示:

    | Building  | Requests Count|
    |   BL 1    |     NULL      |
    |   BL 2    |     14        |
    

    如果在2周的时间范围内有请求,我已经找到了查询,但如果在时间范围内没有请求,则BL 1将不会包含在结果中。

    我想我想把我的Date条件放在SELECT字段的旁边,因为当我把它放在WHERE部分时,它就不包含在集合中了。

    任何帮助表示赞赏。

    编辑:添加以下查询。我已阅读建议的解决方案,但我不确定他们是否解决了这个问题。任何更多的澄清将不胜感激。

    SELECT bl.name, wrs.bl_id, count(wrs.wr_id) as NumWRs
    FROM bl RIGHT JOIN
    --Subquery for Status and groups by workteam and calculates # of days open
    (SELECT Reqs.wr_id, Reqs.date_requested, Reqs.bl_id
      FROM Reqs
      WHERE Reqs.date_requested >= @StartDate AND Reqs.date_requested <=  @EndDate  
      AND Reqs.bl_id IN('B00051', 'B00050', 'B00056', 'B00057', 'B00020', 'B00021', 'B00022', 
      'B00023', 'B00025', 'B00026', 'B00027', 'B00028', 'B00029', 'B00030', 'B00031', 'B00032',
      'B00033', 'B00035', 'B00036', 'B00048', 'B00100', 'B00102', 'B00120', 'B00060', 'B00164',  
      'B00181', '000182', 'B00063', 'B00058')
      )
    ) as wrs ON bl.bl_id = wrs.bl_id
    

3 个答案:

答案 0 :(得分:0)

您需要使用select building from buildings开始查询,以便获取所有行,然后使用现有查询的结果保持联接。

答案 1 :(得分:0)

您可能不想使用列表。

例如,您现在可能有:

 SELECT b.Name -- blah blah blha
 FROM TABLE b
 WHERE b.Name IN ('BL 1','BL 2')

 WHERE b.Name IN (SELECT Name FROM TABLE2)

但这是一个问题,因为你总是想要名字。

因此,请将此标准放在子查询中,然后从该表中执行左连接。

 SELECT b.Name -- blah blah blha
 FROM 
   ( SELECT 'BL 1' as Name
     UNION ALL
     SELECT 'BL 2' as Name
   ) b

 SELECT b.Name -- blah blah blha
 FROM 
   ( SELECT Name FROM TABLE2
   ) b

你可能会说...但是在TABLE2中有一个where子句,除了建筑物名称之外我什么也不想要...执行此操作:

 SELECT b.Name, c.RequestCount -- blah blah blha
 FROM 
   ( SELECT Name FROM TABLE2
   ) b
 LEFT JOIN TABLE2 c ON b.Name = c.Name
 WHERE c.worth > 200000

答案 2 :(得分:0)

好的,谢谢大家,我通过创建2个子查询来解决它,一个包含给定时间段内的所有工作请求,另一个包含我要报告的建筑物列表(使用IN列表)。然后一个右连接,我设置。谢谢大家帮助我思考它!