[英]SQL optional condition in WHERE clause in Report Builder
我正在使用Microsoft Report Builder 3.0創建報告。 我想在WHERE子句中添加一個附加條件,該條件取決於布爾參數@param。 在編程中,通過附加如下的SQL String會很容易:
String sql = "SELECT * FROM tblA WHERE tblA.columnA = 'data' ";
if(param)
{
sql += "AND tblA.columnB IN (SELECT column FROM tbl)";
}
但是如何在純SQL查詢中做到這一點? 我嘗試使用CASE,但似乎無法正常工作。 這是我嘗試過的:
SELECT * FROM tblA
WHERE tblA.columnA = 'data'
CASE @param WHEN 1 THEN AND tblA.columnB IN (SELECT column FROM tbl) END
只需使用涉及參數的邏輯即可:
SELECT *
FROM tblA
WHERE
columnA = 'data' AND
(!param OR columnB IN (SELECT column FROM tbl));
如果columnA
包含data
,並且參數設置為false或參數設置為true並且子查詢成功,則WHERE
子句的計算結果為true。
param
是在客戶端設置的,因此您需要在客戶端進行查詢,您可以使用CASE查詢來實現此目的,如下所示
String sql = "SELECT * FROM tblA
WHERE tblA.columnA = 'data'
AND CASE " +param+ "
WHEN 1 THEN tblA.columnB IN (SELECT column FROM tbl)
ELSE 1
END";
我希望它能起作用
SELECT * FROM [tblA] WHERE tblA.columnA = 'data' AND
(@param <> 1 OR columnB IN (SELECT column FROM tbl)).
簡而言之,可以將可選條件與要驗證的標志置於“ 或”條件中。 假設您在名為@name和@dept的過程中傳遞了參數,並且要檢索所有提及的名稱的結果或特定部門提到的名稱的結果,則可以將其寫為
SELECT * FROM [Employees] WHERE Name = @name AND (Department = @dept OR @dept = 0)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.