有以下tsqldeclare @category table
(
id int,
categoryname nvarchar(50),
allow xml
);
insert into @category values(1,'分类1','<r><u name=''user1'' /><u name=''user2'' /></r>');
insert into @category values(2,'分类3','<r><u name=''user1'' /><u name=''user2'' /><u name=''user3'' /></r>');select * from @category;--我想得到下面的结果,请问该如何写tsql
--也就是将allow字段下的u节点的name属性用逗号拼起来1,'分类1','user1,user2'
2,'分类3','user1,user2,user3'
(
id int,
categoryname nvarchar(50),
allow xml
);
insert into @category values(1,'分类1','<r><u name=''user1'' /><u name=''user2'' /></r>');
insert into @category values(2,'分类3','<r><u name=''user1'' /><u name=''user2'' /><u name=''user3'' /></r>');select * from @category;--我想得到下面的结果,请问该如何写tsql
--也就是将allow字段下的u节点的name属性用逗号拼起来1,'分类1','user1,user2'
2,'分类3','user1,user2,user3'
解决方案 »
- 急呀急呀~~~!!!sql 2000 创建数据库但是我找不到啊
- 跨机器取数据 怎么做性能好
- 我该选择哪种数据库?
- 急救!!! 我的机器装不上SQL Server
- SQL里varchar和Nvarchar有什么区别
- SQL Server 2005创建作业执行SSIS包失败
- 我的程序中有许多相关连的表,一个操作需要更新许多表,效率低
- 把字符串2005-02-03 00:00:00变cast成datetime出错
- 存储过程咋样解密
- 如何用sql的查询分析器显示long text类型字段的全部内容?
- 关于 instead of触发器
- ================= TSQL XML列实现相关新闻的功能 =================
declare @category table
(
id int,
categoryname nvarchar(50),
allow xml
)insert into @category values(1,'分类1','<r><u name=''user1'' /><u name=''user2'' /></r>');
insert into @category values(2,'分类3','<r><u name=''user1'' /><u name=''user2'' /><u name=''user3'' /></r>');
with t as
(select id,categoryname,
o.value('@name','varchar(10)') as name
from @category a
cross apply allow.nodes('/r/u') x(o)
)
select t1.id,t1.categoryname,
stuff((select ','+name from t t2
where t2.id=t1.id and t2.categoryname=t1.categoryname
for xml path('')),1,1,'') name
from t t1
group by t1.id,t1.categoryname/*
id categoryname name
----------- ------------ ---------------------
1 分类1 user1,user2
2 分类3 user1,user2,user3(2 row(s) affected)
*/
IF OBJECT_ID('[tb]') IS NOT NULL DROP TABLE [tb]
GO
CREATE TABLE [tb]([id] INT,[title] VARCHAR(100),[keywords] XML)
INSERT [tb]
SELECT 1,'叙利亚“救危”总理叛逃对阿萨德政权影响几何','<r><i>叙利亚</i><i>阿萨德</i></r>' UNION ALL
SELECT 2,'难民大量涌入宗教冲突恶化——叙利亚危机殃及周边国家','<r><i>叙利亚</i></r>' UNION ALL
SELECT 3,'以色列执意打击伊朗','<r><i>伊朗</i></r>' UNION ALL
SELECT 4,'利比亚即将尘埃落定,叙利亚何去何从','<r><i>叙利亚</i><i>利比亚</i></r>' UNION ALL
SELECT 5,'国际人权组织就叙利亚阿勒颇轰炸发出警告','<r><i>阿萨德</i></r>'
--------------开始查询--------------------------declare @id int;
set @id=1;SELECT b.id FROM
(
SELECT [id],t.value('(.)[1]', 'varchar(50)') [keywords] FROM tb CROSS
APPLY [keywords].nodes('/r/i') AS R(t)where id=1
) AS a
JOIN
(
SELECT [id],t.value('(.)[1]', 'varchar(50)') [keywords] FROM tb CROSS
APPLY [keywords].nodes('/r/i') AS R(t)where id!=@id
) AS b
ON a.[keywords]=b.[keywords]
set @id=1;SELECT t.* FROM
(
SELECT [id],t.value('(.)[1]', 'varchar(50)') [keywords] FROM tb CROSS
APPLY [keywords].nodes('/r/i') AS R(t)where id=1
) AS a
JOIN
(
SELECT [id],t.value('(.)[1]', 'varchar(50)') [keywords] FROM tb CROSS
APPLY [keywords].nodes('/r/i') AS R(t)where id!=@id
) AS b
ON a.[keywords]=b.[keywords]
JOIN tb AS t
ON b.id=t.id
(
id int,
categoryname nvarchar(50),
allow xml
);
insert into @category values(1,'分类1','<r><u name=''user1'' /><u name=''user2'' /></r>');
insert into @category values(2,'分类3','<r><u name=''user1'' /><u name=''user2'' /><u name=''user3'' /></r>');;WITH cte
AS (
SELECT id, categoryname, t.value('@name', 'varchar(50)') allow
FROM @category
CROSS
APPLY allow.nodes('/r/u') AS R ( t )
)
SELECT DISTINCT
id, categoryname, allow = STUFF((
SELECT ','+ allow FROM cte WHERE id= t.id AND categoryname= t.categoryname
FOR XML PATH('')
), 1, 1, '')
FROM cte AS t