[英]SQL Server - Order of Operations difficulty
試圖弄清楚如何正確訂購以獲得預期的結果。 我正在尋找的是 A 為真,而 B、C 或 D 中的任何一個也為真。 Starting_Date 和 Ending_Date 在代碼的前面定義。
Declare @Starting_Date date = '2019-01-01'
Declare @Ending_Date date = '2019-01-31'
Select x
From y
Where REPORTING_UNIT = '36B11' --A
AND ((Closing_Date BETWEEN @Starting_Date AND @Ending_Date) --B Closing date is between report date range (eg: episode already open before period)
OR (Opening_Date BETWEEN @Starting_Date AND @Ending_Date) --C Opening date is between report date range (eg: episode was opened at some point during the period)
OR (Reverse_Opening_Date BETWEEN @Starting_Date AND @Ending_Date)) --D Reverse opening date is between report date range (eg: episode was closed at some point, then reopened during the period)
預期成績:
1858 年是數據庫表示“它沒有關閉”的方式。 所以在這個例子中,除了第 14 行之外,所有這些都將包括在內,該行在我們定義的結束日期之前關閉。 第 5 行和第 6 行也將包括在內,因為該劇集在我們評估期間是開放的。
編輯:添加了編碼的開始和結束日期以及一些預期結果。
只需在WHERE
子句中保留REPORTING_UNIT = '36B11' AND Closing_Date BETWEEN @Starting_Date AND @Ending_Date
條件,然后查看獲得的結果,然后逐個添加OR
條件,您可能會了解為什么會發生這種情況。 此外,粗略瀏覽一下您的上述數據后,邏輯上只應包括第 5 行。 BETWEEN
子句將只檢查日期范圍,第 5 行滿足這一要求。
以下是您的代碼減去 OR 序列中的冗余括號,應該可以工作。
您對@Starting_Date 和@Ending_Date 的值有信心嗎?
Select x
From y
Where REPORTING_UNIT = '36B11' --A
AND (Closing_Date BETWEEN @Starting_Date AND @Ending_Date --B Closing date is between report date range (eg: episode already open before period)
OR Opening_Date BETWEEN @Starting_Date AND @Ending_Date --C Opening date is between report date range (eg: episode was opened at some point during the period)
OR Reverse_Opening_Date BETWEEN @Starting_Date AND @Ending_Date) --D Reverse opening date is between report date range (eg: episode was closed at some point, then reopened during the period)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.