我有一个包含带分隔符字符串的字段的表,这实际上是一个未分类的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
编辑:我知道这实际上远非理想的建模,但不幸的是,这是我必须使用的。
答案 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 distinctSELECT 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报告中多值参数的值。