2013-10-08 55 views
-1

我很努力爲下面的場景編寫查詢,任何人都可以幫助我嗎?SQL在OR條件中顯示錯誤的記錄

我有兩列錯誤和優先級都是數字字段。需要根據條件取回。如果我從UI屏幕選擇值3,它必須在表格中查找記錄。

如果在任一列的值比賽我一定要回報,我已經寫了這樣

Select * 
    FROM WorkItems 
WHERE [System.Title] like '%defect%' 
    AND [System.WorkItemType] in ('Incident','bug') 
    AND [ErrorClass] =3 
    OR [Microsoft.VSTS.Common.Priority] =3 
    AND [Customer] = 'XYZ' 
order by [System.WorkItemType] 

其提供虛假記錄,並獲取所有優先級或記錄errorclass = 3的記錄,我需要的只記錄工作項類型=事件或錯誤類= 3或優先級= 3的錯誤

它從表中返回所有記錄。

如果我把和條件這樣[ErrorClass] = 3[Microsoft.VSTS.Common.Priority] = 3其只返回如果這兩個值是3,我需要所有在上述情況下沿搭配3,記錄

回答

3

嘗試

Select * 
    FROM WorkItems 
WHERE System.Title like '%defect%' 
    AND System.WorkItemType in ('Incident', 'bug') 
    AND (ErrorClass = 3 OR Microsoft.VSTS.Common.Priority = 3)  
    AND Customer = 'XYZ' 
order by System.WorkItemType 
+1

我想補充爲此,OP在學習一些東西。 where子句中添加的括號會破壞邏輯鏈。所以,如果你願意的話,不要說它對每一個條件都是AND OR,你可以用括號把它分解成在AND子句中有一個OR子句。 –

+0

非常感謝,它的工作。對不起,我在sql查詢很差。 – user1845163

+0

操作的操作者是先評估ANd條件,然後評估OR條件。這是重要的知道,因爲它在結果上有所不同。當您將AND和OR混合以確保您的意圖清晰時,最好將()中的東西(它們按照操作順序比AND子句更高)放在一起。 – HLGEM