2016-04-21 117 views
0

enter image description here我正在研究具有“Quarter1”,“Quarter2”,“Quarter3”和“Quarter4”参数的SSRS报告,并且我有一个查询需要获取用户值获取该季度的数据,如果选择了季度1,则我的查询看起来像这样。我使用VS 2010 BIDS为SSRS和SQL 2012数据库SSRS报告参数需要多个值

Select 
CASE WHEN MONTH(DateGenerated) <= 3 THEN '1Q/' 
WHEN MONTH(DateGenerated) > 3 and MONTH(DateGenerated) <= 6 THEN '2Q/' 
WHEN MONTH(DateGenerated) > 6 and MONTH(DateGenerated) <= 9 THEN '3Q/' 
WHEN MONTH(DateGenerated) > 9 and MONTH(DateGenerated) <= 12 THEN '4Q/' END 
as GenDate, Notes, Equation 

from SubTask 

where Year(DateGenerated) = @year and MONTH(DateGenerated) in (@Quarter) 

当SSRS这样做,我不能给个月(1,2和3)价值Quarter1。有没有我失踪的方法。感谢帮助..

回答

0

您的来自SSRS的参数将以逗号分隔的字符串的形式出现,因此我们需要一个函数来分隔这些值。

例如,如果你的参数是四分之一......那么你的SQL就像

Create Procedure xyz 
@Quarter varchar(50) = null 
as BEGIN 

Select 
CASE WHEN MONTH(DateGenerated) <= 3 THEN '1Q/' 
WHEN MONTH(DateGenerated) > 3 and MONTH(DateGenerated) <= 6 THEN '2Q/' 
WHEN MONTH(DateGenerated) > 6 and MONTH(DateGenerated) <= 9 THEN '3Q/' 
WHEN MONTH(DateGenerated) > 9 and MONTH(DateGenerated) <= 12 THEN '4Q/' END 
as GenDate, Notes, Equation 

from SubTask 

where Year(DateGenerated) = @year and MONTH(DateGenerated) 
in (Select Value From dbo.FNSplit(@Quarter,',')) 

而且功能...

CREATE FUNCTION [dbo].[FnSplit] 
(
@List nvarchar(max), 
@SplitOn nvarchar(5) 
) 
RETURNS @RtnValue table 
(

Id int identity(1,1), 
Value varchar(max) 
) 
AS 
BEGIN 
While (Charindex(@SplitOn,@List)>0) 
Begin 
Insert Into @RtnValue (value) 
Select 
Value = ltrim(rtrim(Substring(@List,1,Charindex(@SplitOn,@List)-1))) 
Set @List = Substring(@List,Charindex(@SplitOn,@List)+len(@SplitOn),len(@List)) 
End 

Insert Into @RtnValue (Value) 
Select Value = ltrim(rtrim(@List)) 
Return 
END 

GO