Sql-Server-2016

在 SSRS 中如何為變數賦值

  • June 11, 2019

最近開始使用 Microsoft SQL Server 2016 Reporting Services,第五版,Brian Larson 學習 Reporting Services。我正在創建這個使用 UNION 創建數據集 FuelType 的報告,該數據集將用於將值分配給下拉列表。

SELECT 'All' AS Fueltype, '_All' AS SortField
UNION
SELECT Description, Description FROM Propulsion ORDER BY SortField

現在有另一個數據集可以幫助為我和那裡生成圖表。

SELECT Propulsion.Description AS Fueltype, FuelPrice.PriceStartDate, FuelPrice.Price    
FROM  FuelPrice 
INNER JOIN Propulsion ON FuelPrice.PropulsionID = Propulsion.PropulsionID
WHERE        (YEAR(FuelPrice.PriceStartDate) = @year) AND  (Propulsion.Description = @PropulsionType) 
OR  (YEAR(FuelPrice.PriceStartDate) = @year) AND (@PropulsionType = 'All')
ORDER BY Fueltype, FuelPrice.PriceStartDate

我不明白,如何通過使用“@PropulsionType = ‘All’”將所有可用值傳遞給參數。

在此處輸入圖像描述

對於有這本書的人,這是在第 6 章:燃料價格圖表,第 2 版下

SSRS 沒有做任何特別的事情。實際上是查詢區分了提取所有燃料類型或僅提取指定的燃料類型,儘管我懷疑這本書有錯字,因為它看起來缺少一對額外的括號。真正的魔法應該發生在謂詞中,這裡:

WHERE  (YEAR(FuelPrice.PriceStartDate) = @year) AND (Propulsion.Description = @PropulsionType) 
  OR  (YEAR(FuelPrice.PriceStartDate) = @year) AND (@PropulsionType = 'All')

這確實應該以以下兩種方式之一編寫:

WHERE  ((YEAR(FuelPrice.PriceStartDate) = @year) AND (Propulsion.Description = @PropulsionType))
  OR  ((YEAR(FuelPrice.PriceStartDate) = @year) AND (@PropulsionType = 'All'))

或者,另一種方式:

WHERE (YEAR(FuelPrice.PriceStartDate) = @year) 
AND  ((Propulsion.Description = @PropulsionType) 
       OR  (@PropulsionType = 'All'))

基本上這樣做是在您的報告傳遞'All'參數的情況下,不要過濾Propulsion.Description. 如果傳遞的參數不是'All',則您希望過濾該特定值。從中取出 SSRS,您可以通過此dbfiddle.uk連結查看工作範例。

引用自:https://dba.stackexchange.com/questions/240250