2015-09-25 46 views
0

我轉圈圈帶着幾分SQL的使用,希望得到一些幫助。創建在SSRS數據集的SQL查詢新的行中的報表參數

我擡頭創建臨時表,嵌套Select語句(其中的建議似乎是避免這些像瘟疫)和Case語句的各種用途,但我似乎無法找到一個可行的解決方案。我會說我是SQL的初學者級別。

我有10條相關記錄的表。該作品以返回表中的所有相關條目的查詢是:

SELECT 
    TblServAct.ServActId 
    ,TblServAct.ServActName 
FROM TblServAct 
WHERE TblServAct.ServActExclude IS NULL 
ORDER BY TblServAct.ServActName 

這裏就是我遇到的問題:

當參數(@YESNOActivity)=是,我希望中的所有行要返回的表。我設法做到這一點與CASE聲明

...但是,當參數(@YESNOActivity)=否,我希望只有一行被返回,實際上不存在於表中(並且不應該是插入到實際的表中)。我需要插入的值有:ServActId = 101和ServActName ='在參數2中選擇YES以按服務活動過濾'

對於背景,我這樣做的原因是因爲我發現SSRS報告參數尤其很難有條件地格式化。我想用上面的數據集在參數返回消息(可以稱之爲參數2)用戶需要在(@YESNOActivity)才能看到在參數2的完整選擇列表選擇是。

如果我能得到這個工作,我可以看到很多的潛力,再利用,因此所有的建議讚賞

感謝 艾琳

回答

0

我相信這應該做的工作,只包括你的參數在用自己的行數據的WHERE條款和UNION它。

SELECT 
    TblServAct.ServActId 
    ,TblServAct.ServActName 
FROM TblServAct 
WHERE TblServAct.ServActExclude IS NULL 
    AND @YESNOActivity = 'Yes' 
UNION ALL 
SELECT 
    ServActId = 101 
    ,ServActName = 'Select YES in Parameter2 to filter by Service Activity' 
WHERE @YESNOActivity = 'No' 
ORDER BY TblServAct.ServActName 
+0

哇哦 - 這是夢幻般的感謝@NickyvV!完美的作品。我正在吠叫錯誤的樹,所以你救了我幾個小時:)我想我需要去了解更多關於UNION的使用.. – EileenS

0

一種方法是使用此查詢:

SELECT 
    TblServAct.ServActId 
    ,TblServAct.ServActName 
FROM TblServAct 
WHERE TblServAct.ServActExclude IS NULL 
    AND 'Yes' = @YESNOActivity 
UNION ALL 
SELECT 
    101 AS ServActId 
    ,'Select YES in Parameter2 to filter by Service Activity' AS ServActName 
WHERE 'No' = @YESNOActivity 
ORDER BY TblServAct.ServActName 

另一種方法是創建兩個數據流,並使用你的變量在約束的處理髮送給一個或另一個。

第三種方法是將表達式放在SQL命令上並使用您的變量在兩個SQL語句之間切換。

+0

謝謝戴夫。第一種方法似乎起作用。 – EileenS