簡體   English   中英

報表制作工具中WHERE子句中的SQL可選條件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM