我不确定如何标题这个问题,我正在尝试构建一个返回a的查询 计数
即使在该时间范围内没有请求,我也总是希望所有建筑物都出现。 示例可能如下所示:
| 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
答案 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列表)。然后一个右连接,我设置。谢谢大家帮助我思考它!