测试建表
create table WebNewsInfo(ID int identity(1,1),NewsTitle varchar(32) not null,HotFlag tinyint not null)alter table WebNewsInfo add constraint PK_WebNewsInfo_ID primary key(ID)insert into WebNewsInfo values('测试1',1)insert into WebNewsInfo values('测试2',0)select * from WebNewsInfo 要将两条数据合并成一条显示<p head="Hot" hcolor="0xffff00" content="测试1"/><p head="New" hcolor="0xffff00" content="测试2"/>,而且只显示出一条select (select '<p head="'+(CASE when HotFlag=1 THEN 'Hot' else 'New' END )
+'" hcolor="0xffff00" content="'+NewsTitle+'"/>'from WebNewsInfo for xml path(''))from WebNewsInfo这样写会显示两条数据,而且> <都被转义了
select '<p head="'+(CASE when HotFlag=1 THEN 'Hot' else 'New' END )
+'" hcolor="0xffff00" content="'+NewsTitle+'"/>'from WebNewsInfo for xml path('')这样写> <都被转义了,而且是xml的形式
select stuff((select '<p head="'+(CASE when HotFlag=1 THEN 'Hot' else 'New' END )
+'" hcolor="0xffff00" content="'+NewsTitle+'"/>'from WebNewsInfo for xml path('')),1, 0, '')这样写不是xml格式了,但是还是没有解决转义的问题
select
( select '<p head="'+(CASE when HotFlag=1 THEN 'Hot' else 'New' END ) +'" hcolor="0xffff00" content="'+NewsTitle+'"/>' from WebNewsInfo FOR XML PATH(''),TYPE).value('.','NVARCHAR(MAX)') --防止转义这样写就可以实现要求
select stuff((select convert(varchar(20),ID)+':'+NewsTitle+';' from WebNewsInfo FOR XML PATH('')),1, 0, '')
用这个语句可以实现列转行
此外,要实现行转列,可以采用split函数的实现方法