SSRS / SQL - 连接两个逗号分隔的字符串

时间:2013-05-30 19:02:50

标签: sql csv reporting-services

在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中尝试了加入(...)和拆分(加入(...)),但无法弄清楚如何从那里开始。我无法将数组从SSRS传递给SQL,所以没有骰子。我无法弄清楚如何从逗号分隔的字符串转到SQL中的数组。我要疯了。有人有什么好主意吗?

1 个答案:

答案 0 :(得分: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了解多个示例,并为您选择最适合的示例。