【问题标题】:SSRS/SQL - Concatenate Two Comma-Separated StringsSSRS/SQL - 连接两个逗号分隔的字符串
【发布时间】:2013-05-30 19:02:50
【问题描述】:

在 SSRS 2008 R2 SP1 中,我正在开发一个报告,用户可以在其中选择 @Types 和 @Areas。这两个都是多值参数。我需要在 SSRS 或 SQL SP 中将每个@Areas 与每个@Types 连接起来。例如:

@Types: DP,DPC,PC
@Areas: M1,M2,M3

Result: 'DP_M1,DPC_M1,PC_M1,DP_M2,DPC_M2,PC_M2,DP_M3,DPC_M3,PC_M3'

我终其一生都无法弄清楚如何做到这一点。我在 SSRS 中尝试过 Join(...) 和 Split(Join(...)) 但不知道如何从那里开始。我不能将数组从 SSRS 传递到 SQL,所以没有骰子。我不知道如何从逗号分隔的字符串转到 SQL 中的数组。我要疯了。有人有什么绝妙的主意吗?

【问题讨论】:

    标签: sql csv reporting-services


    【解决方案1】:

    您可以使用Turning a Comma Separated string into individual rows 此处的一些方法为每组值获取一个表,然后将这些表交叉连接在一起并连接这些值。

    我根据上面链接中的 CTE 答案将这个示例拼凑在一起:

    declare @Types as varchar(max)
    declare @Areas as varchar(max)
    
    set @Types = 'DP,DPC,PC'
    set @Areas = 'M1,M2,M3'
    
    ;with tmp(DataItem, Data) as (
    select LEFT(@Types, CHARINDEX(',',@Types+',')-1),
        STUFF(@Types, 1, CHARINDEX(',',@Types+','), '')
    union all
    select LEFT(Data, CHARINDEX(',',Data+',')-1),
        STUFF(Data, 1, CHARINDEX(',',Data+','), '')
    from tmp
    where Data > ''
    )
    
    select 
        DataItem
    into #Types
    from tmp
    
    ;with tmp2(DataItem, Data) as (
    select LEFT(@Areas, CHARINDEX(',',@Areas+',')-1),
        STUFF(@Areas, 1, CHARINDEX(',',@Areas+','), '')
    union all
    select LEFT(Data, CHARINDEX(',',Data+',')-1),
        STUFF(Data, 1, CHARINDEX(',',Data+','), '')
    from tmp2
    where Data > ''
    )
    
    select 
        DataItem
    into #Areas
    from tmp2
    
    select
    _Types.DataItem + '_' + _Areas.DataItem
    from #Types _Types
    cross join #Areas _Areas
    
    drop table #Types
    drop table #Areas
    

    如果您需要重新加入这些,您可以查看这篇文章 here 以获取多个示例并选择最适合您的一个。

    【讨论】:

    • 谢谢,我会试一试!目前像母亲一样处理多项任务,所以可能需要一段时间。
    猜你喜欢
    • 1970-01-01
    • 2017-09-29
    • 1970-01-01
    • 1970-01-01
    • 2014-05-27
    • 2021-05-18
    • 1970-01-01
    • 1970-01-01
    • 2021-07-03
    相关资源
    最近更新 更多