测试建表
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函数的实现方法