在数据集中使用带有分隔字符串的多值参数

时间:2015-02-12 12:17:14

标签: sql reporting-services sql-server-2014

我有一个包含带分隔符字符串的字段的表,这实际上是一个未分类的id列表

id| name | valueslist
----------------------------------------------
1 | John | 46423423,36456325,76473234,98798796
2 | Mike | 36456325,98798796
3 | Sara | 46423423

我有一个基于数据集的多值参数,列出了所有可能的id

    param: @chosenvalues
    possible values: 
    46423423
    36456325
    76473234
    98798796

现在,当在参数中选择一个或多个id时,我想要从我的表中返回其值列表中存在该值的所有记录。

例如:

If I select 36456325 I need John & Mike to be returned
If I select 46423423 I need John & Sara to be returned
If I select 46423423 & 98798796 I need all three to be returned 

我以为我可以解决这个问题

SELECT * FROM table WHERE '%' + valueslist + '%' IN ('%' + @chosenvalues + '%') 

但这不起作用。关于如何解决这个问题的任何建议?

TIA,

Henro

编辑:我知道这实际上远非理想的建模,但不幸的是,这是我必须使用的。

2 个答案:

答案 0 :(得分:2)

请尝试以下SQL Select语句

/*
create table valueslisttbl (id smallint, name varchar(20), valueslist varchar(1000))
insert into valueslisttbl values 
(1, 'John', '46423423,36456325,76473234,98798796'),
(2, 'Mike', '36456325,98798796'),
(3, 'Sara', '46423423')
*/

declare @chosenvalues varchar(100)
--set @chosenvalues = '46423423'
--set @chosenvalues = '36456325'
--set @chosenvalues = '76473234'
set @chosenvalues = '46423423,98798796'

select distinct name
from valueslisttbl
cross apply dbo.Split(valueslisttbl.valueslist, ',') s
where s.val in (
    select val from dbo.Split(@chosenvalues, ',')
)

另请注意,您需要SQL Split function才能解决您的要求

我使用SQL XML进行上述SQL Server拆分功能,您可以在http://www.kodyaz.com/articles/t-sql-convert-split-delimeted-string-as-rows-using-xml.aspx找到SQL源代码

我希望它有所帮助,

答案 1 :(得分:1)

突然间,我被闪电击中,这个想法以一种天才般的闪光告诉我。 (好吧,无论如何它都是这样的)

我和john's和janes一起参加了桌子,并提供了所有可能的解决方案。然后我使用真正的标准where子句

做了一个select distinct
SELECT DISTINCT j.*
FROM tableJohn j
LEFT JOIN Table_Solutions s on '%'+ s.value + '%' LIKE j.valuelist 
WHERE s.value in (@chosen_values)

@chosen_values现在可以很好地填充SSRS报告中多值参数的值。