我有一个字段名称DAILYREPORT.WEATHERCONDITION,根据用户从他可用的天气复选框列表中选择的内容,可以将值保存为“1,2,3”或“1”或“2,4”。天气表包含他选择的天气列表
Weather Table
ID Condition
----------
1 Sunny
2 Cloudy
3 Fine
4 Windy
现在我需要一个查询,在'Sunny,Cloudy,Fine'
DAILYREPORT.WEATHERCONDION=1,2,3
答案 0 :(得分:4)
试试这个:
SELECT STUFF
(
(select ',' + Condition
from
Weather
where
ID in (1,2,3)
FOR XML PATH('')
),1,1,''
)
答案 1 :(得分:2)
DECLARE @list VARCHAR(MAX)
SELECT @list = COALESCE(@list+',' ,'') + Condition
FROM Weather
WHERE ID IN (1,2,3)
SELECT @list
您声明@list
类型的varchar
变量。然后使用COALESCE
表达式(请查看http://msdn.microsoft.com/en-us/library/ms190349.aspx以获取有关其工作原理的更多详细信息),即可获得所需内容。
这是一个SQL小提琴,表明上面的工作正如预期的那样
http://sqlfiddle.com/#!6/65df2/1
注意:为了避免任何误解,我不是说COALESCE解决了所述的问题。
正如米卡尔在下面写的那样。只是在那里处理初始化字符串和问题 最后一个额外的逗号。
答案 2 :(得分:2)
Declare @Weather Table (ID int, Condition varchar(50))
insert into @Weather values(1,'Sunny'),(2,'Cloudy'),(3,'Fine'),(4,'Windy')
select top 1
stuff((select ','+Condition from @Weather b where id in(1,2,3) for xml path('')),1,1,'')Condition
from @Weather
答案 3 :(得分:0)
试试这个我希望它对你的
有用select SUBSTRING(
(select ','+ s.condition from DAILYREPORT s where id in (1,2,3) order by condition for xml path('')),2,200000) as CSV