2017-05-03 119 views
0

我正在使用此代码对出现在“问题”的主控症状的最近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; 

我希望做的是创造一个左外连接在同一个表引用此记录对“名”

我已经非常有限的任何其他主症状(读无)的经验加入同一张桌子,所以我有点迷路,我无法从我在这里阅读的帖子中弄清楚。

谁能帮助?

+1

编辑您的问题,并提供样本数据和期望的结果。例如,这是什么意思:“引用任何额外的主要症状,记录对'名称'”? –

+1

'vw_UserView_ME_Open'是一个视图吗? –

+0

这里是一个开始的好地方。 http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ –

回答

0

这可能会让你开始?基本上,自我JOIN与其他JOIN一样,如果你对别名小心。我的例子只是在Master Symptom =“Problem”中查找具有相同名称的任何条目,然后将它们计算在内。你可能想要做一些与结果不同的事情?

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 

到左结束JOIN的标准,而不是在WHERE子句。

实际上这不是最好的例子,因为你可能实际上将额外的IS NULL标准添加到WHERE子句中而不会破坏JOIN。然而,结果可能不会如预期的那样,因为现在这意味着:

  • 得到我记录,其中相关条目具有NULL是关闭值;
  • 也得到我的记录,根本没有相关的条目(因为这也会返回一个NULL)。
+0

谢谢你,我能够适应这个在我的路上启动我。非常感谢。我从来没有像你在这里那样把SQL放在外面。这看起来似乎更容易。 – Michael