【问题标题】:Allow multiselect on a CSV column in SSRS允许对 SSRS 中的 CSV 列进行多选
【发布时间】:2015-04-22 17:59:35
【问题描述】:

我正在尝试在报告中的 CSV 列上进行参数多选,但我不确定如何执行此操作,或者是否可行。返回的示例数据集:

|  ID  |  Name  |      Types      |
|  1   |  Test  |  Type A, Type B |

当前数据集在 WHERE 子句中使用类似这样的参数:

WHERE Types LIKE '%' + @Types + '%'

这可以作为单选正常工作,但当然不适用于多选。我怎样才能使参数允许多个值并仍然搜索此 CSV 列?我希望像WHERE Types LIKE IN '%' + @Types + '%' 这样的东西可以工作,它基本上最终会成为WHERE Types LIKE IN ('%Type A%, %Type B%')。或者有没有更好的方法可以显示列,即使 SQL 没有这样做,它也会显示为 CSV?我仍然希望它显示所有值并且只查看所选类型是否在列表中,因此如果参数设置为Type B,它仍应显示Type A, Type BID = 1。我知道 CSV 在 SQL 中通常不受欢迎,但它似乎是经常被要求制作 CSV 列然后允许对其进行多选的事情。

【问题讨论】:

标签: sql-server csv reporting-services ssrs-2008


【解决方案1】:

会有两种可能性 (1) 您的过滤器将具有单个值,例如“A 型” (2) 您的过滤器将具有多个值,例如“A 型,B 型” 在这里,我为 1 和 2 提供解决方案。 在这里,我使用了#table 使其易于理解

虚拟数据是:

If Object_Id('tempdb.dbo.#temp') Is Not Null
Begin
    Drop Table #temp;
End

If Object_Id('tempdb.dbo.#temp') Is Null
Begin
    Create Table #temp
    (
         Id         Int Identity(1,1) Primary Key
        ,Name       Varchar(100)
        ,Types      Varchar(2000)
    )
End

Insert Into #temp(Name,Types) Values
('Test','Type A, Type B'),
('Test1','Type A, Type C'),
('Test2','Type B'),
('Test3','Type C, Type A'),
('Test4','Type C');

Declare  @TypeFilter        Varchar(2000)

可能性1:

Select   @TypeFilter = 'Type C'

Select  *
From    #temp As t With (Nolock)
Where   (',' + t.Types + ',') Like ('%,' + @TypeFilter + ',%')

可能性2:

Select   @TypeFilter = 'Type C, Type B'

Select  Distinct
        t.*
From    #temp As t With (Nolock)
        Join dbo.UDF_GetSplitValues(@TypeFilter,',') As p On (',' + t.Types + ',') Like ('%,' + p.stItems + ',%')

这里对于可能性 2,我使用了 table-value 函数,它将 CSV 值返回到表中并应用了与主表的连接。

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    你可以试试你的 where 子句

    WHERE PATINDEX('%' + Types + '%',@Types)>0
    

    【讨论】:

      猜你喜欢
      • 2018-09-13
      • 2010-09-17
      • 1970-01-01
      • 1970-01-01
      • 2015-12-18
      • 2017-12-22
      • 1970-01-01
      • 1970-01-01
      • 2015-05-18
      相关资源
      最近更新 更多