2013-05-30 38 views
0

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

@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

您可以使用这里的一些方法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多个实例,并挑选最适合你的一个。

+0

谢谢,我会给它一个镜头!现在像一位母亲一样多任务处理,所以可能会有一段时间。 – Jimfletcha