利用xml改造以前在2000下的合并相同项目的函数

------------------------------------<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

-- Author: happyflystone

-- Date:2008-11-23 22:17:36

-- Description:利用xml改造以前在2000下的合并相同项目的函数

------------------------------------

-- 运行环境:

SELECT @@version

/*

-------------------------------------------------

Microsoft SQL Server 2005 - 9.00.2047.00 (Intel X86)

Apr 14 2006 01:12:25

Copyright (c) 1988-2005 Microsoft Corporation

Standard Edition on Windows NT 5.0 (Build 2195: Service Pack 4)

(1 行受影响)

*/

-- Test Data: TA

IF OBJECT_ID('TA') IS NOT NULL

DROP TABLE TA

GO

CREATE TABLE TA(ID INT,DATA VARCHAR(50))

INSERT TA VALUES(1,'aa')

INSERT TA VALUES(1,'bb')

INSERT TA VALUES(1,'cc')

INSERT TA VALUES(2,'eee')

INSERT TA VALUES(2,'fff')

GO

-- 先来看看一个合并的例子:

CREATE FUNCTION F_STR(@ID INT)

RETURNS VARCHAR(100)

AS

BEGIN

DECLARE @S VARCHAR(100)

SELECT @S = ISNULL(@S+',','')

+DATA

FROM TA

WHERE ID = @ID

RETURN @S

END

GO

SELECT ID,DBO.F_STR(ID) AS COL

FROM TA

GROUP BY ID

/*

ID COL

----------- ----------------------------

1 aa,bb,cc

2 eee,fff

*/

DROP FUNCTION F_STR

GO

-- 下面我们利用XML来合并相同项,我们创建一个合并同类项的函数。

CREATE FUNCTION F_STR(@ID int)

RETURNS VARCHAR(100)

AS

BEGIN

DECLARE @x XML,@ret VARCHAR(100)

SET @x=

(SELECT DATA

FROM TA

WHERE ID = @ID

FOR XML PATH(''),ROOT('v'));

SELECT @ret = CAST(

@x.query('

<v>

{ for $i in //DATA

return concat(string($i),",")

}

</v>').value('/v[1]','VARCHAR(100)')

AS VARCHAR(100))

RETURN @ret

END

GO

-- 运行及结果,并删除函数

SELECT ID,DBO.F_STR(ID) AS COL

FROM TA

GROUP BY ID

/*

ID COL

----------- ----------------------------

1 aa,bb,cc

2 eee,fff

*/

DROP FUNCTION F_STR

-- 最后我贴上经常使用XML语法合并同类项一般SQL写法:

-- 1 (AUTO):

SELECT

ID,

[VALUES]=STUFF(REPLACE(REPLACE((SELECT DATA

FROM TA

WHERE ID=T.ID FOR XML AUTO),

'"/><TA DATA="',','),

'"/>',''),1,10,'')

FROM TA T

GROUP BY ID

-- 2:(OUTER APPLY,AUTO)

SELECT *

FROM(

SELECT DISTINCT

id

FROM ta

)A

OUTER APPLY(

SELECT

[bbb]= STUFF(REPLACE(REPLACE(

(

SELECT data FROM ta N

WHERE id = A.id

FOR XML AUTO

), '<N data="', ','), '"/>', ''), 1, 1, '')

)N

-- 3:(PATH)

SELECT

ID,

[VALUES]=STUFF((SELECT ','+LTRIM(DATA)

FROM TA T

WHERE ID=TA.ID FOR XML PATH('')), 1, 1, '')

FROM TA

GROUP BY ID

-- 上面的SQL运行结果都是一样,如下:

/*

ID

----------- ----------------------------

1 aa,bb,cc

2 eee,fff

*/

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值