2017-05-03 131 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