我有一个字段名称DAILYREPORT.WEATHERCONDITION,它可以根据用户从天气检查列表中选择的值将值保存为'1,2,3'或'1'或'2,4'可供他使用的盒子。天气表格包含了他选择返回逗号分隔值SQL
Weather Table
ID Condition
----------
1 Sunny
2 Cloudy
3 Fine
4 Windy
现在我需要查询时DAILYREPORT.WEATHERCONDION=1,2,3
我有一个字段名称DAILYREPORT.WEATHERCONDITION,它可以根据用户从天气检查列表中选择的值将值保存为'1,2,3'或'1'或'2,4'可供他使用的盒子。天气表格包含了他选择返回逗号分隔值SQL
Weather Table
ID Condition
----------
1 Sunny
2 Cloudy
3 Fine
4 Windy
现在我需要查询时DAILYREPORT.WEATHERCONDION=1,2,3
DECLARE @list VARCHAR(MAX)
SELECT @list = COALESCE(@list+',' ,'') + Condition
FROM Weather
WHERE ID IN (1,2,3)
SELECT @list
您声明varchar
类型的@list
变量返回的条件'Sunny,Cloudy,Fine'
天气名单。然后使用COALESCE
表达式(请看这里http://msdn.microsoft.com/en-us/library/ms190349.aspx了解它的工作原理的进一步细节),你会得到你想要的。
这是一个SQL小提琴是表明上述作品预计
http://sqlfiddle.com/#!6/65df2/1
注意:为了避免任何误解,我不说,COALESCE解决了上述问题。
它只是在那里处理初始化字符串和最后一个额外逗号问题 。
as Mikael在下面写道。
我不认为downvote是因为代码。代码起作用。然而,关于它如何工作的描述却是错误的。合并与连接字符串无关。连接字符串是用'+'完成的,这段代码使用了一个未记录(据我所知)的特性,即select语句中每一行的变量都会被更新。 'coalesce'只是在那里处理初始化字符串和最后一个额外逗号的问题。 http://sqlfiddle.com/#!6/65df2/3 –
@Mikael感谢您的评论,因为我对downvote感到困惑。 downvoter应该留下评论,以便更好地回答或删除它。但是,我并没有在上面说明COALESCE解决了这个问题。再次感谢 ! – Christos
试试这个:
SELECT STUFF
(
(select ',' + Condition
from
Weather
where
ID in (1,2,3)
FOR XML PATH('')
),1,1,''
)
试试这个,我希望它是有用的你
select SUBSTRING(
(select ','+ s.condition from DAILYREPORT s where id in (1,2,3) order by condition for xml path('')),2,200000) as CSV
矿是同克里希纳,
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
对不起..我的坏..我使用sql-server – user1699025
http://stackoverflow.com/questions/17591490/how-to-make-a-query-with-group-concat-in-sql-server –
@SchlaWiener :) –