0

在 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 中的数组。我要疯了。有人有什么绝妙的主意吗?

4

1 回答 1

1

您可以使用此处的一些方法将逗号分隔的字符串转换为单独的行来为每组值获取一个表,然后将这些表交叉连接在一起并连接这些值。

我把这个例子放在了上面链接中的 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

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

于 2013-05-30T19:12:52.807 回答