我正在使用此代码对任何名称进行排序'出现在过去70天内的主要症状为“问题”。我有开放和封闭的列,所以我只对任何仍然存在的问题感兴趣。
select
name, LastEDT
from
vw_UserView_ME_Open
where
received between dateadd(day, datediff(day, 0, getdate()) - 70, 0)
and dateadd(day, datediff(day, 0, getdate()), 0)
and MasterSymptom = 'Problem'
and closed is null
order by
'LastEDT' asc;
我要做的是在同一个表上创建一个左外连接,以引用根据'名称'
记录的任何其他主要症状我在同一张桌子上的连接经验非常有限(读取没有),因此我有点迷失,我无法从我在这里阅读的帖子中找到它。
有人可以帮忙吗?
答案 0 :(得分:0)
这可能会让你入门?基本上,如果你小心你的别名,自我JOIN就和任何其他JOIN一样。我的示例只是查找Master Symptom =“Problem”中具有相同名称的任何条目,然后对其进行COUNT。您可能希望对结果做一些不同的事情吗?
SELECT
o.name,
o.LastEDT,
COUNT(r.*) AS related_problems
FROM
vw_UserView_ME_Open o
LEFT JOIN vw_UserView_ME_Open r ON r.name = o.name AND r.MasterSymptom = 'Problem'
WHERE
o.received BETWEEN CONVERT(DATE, DATEADD(DAY, -70, GETDATE())) AND CONVERT(DATE, GETDATE())
AND o.MasterSymptom = 'Problem'
AND o.closed IS NULL
GROUP BY
o.name,
o.LastEDT
ORDER BY
o.LastEDT;
我在同一时间“整理”了你的SQL。
请记住,因为这是LEFT JOIN,所以不能将相关表的任何条件添加到WHERE子句中,或者您实际上是将LEFT JOIN添加到INNER JOIN中。因此,如果您还想测试关闭的IS NULL,那么您可以添加:
r.closed IS NULL
到LEFT JOIN标准的末尾,但不是WHERE子句。
实际上这不是最好的例子,因为你可以在不破坏JOIN的情况下将额外的IS NULL标准添加到WHERE子句中。但是,结果可能不会像预期的那样,因为现在意味着: