`
javababy1
  • 浏览: 1220436 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

利用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

*/

分享到:
评论

相关推荐

    ORACLE操作XML函数

    ### ORACLE操作XML函数 #### 一、XMLTYPE_instance与XPath_string 在Oracle数据库中,`XMLTYPE`是一种专门用于存储XML数据的数据类型。通过使用`XMLTYPE`字段,可以有效地管理和查询XML文档。其中,`XPath_string`...

    halcon XML文件处理函数,halcon函数手册,Halcon

    在机器视觉领域,HALCON是一种广泛...综上所述,HALCON的XML文件处理函数为用户提供了强大且灵活的工具,用于在机器视觉项目中管理和交换数据。通过熟练掌握这些函数,开发者可以实现更高效、更具扩展性的解决方案。

    xml合并工具 gooseeker

    Gooseeker可能利用DOM解析XML,以便于合并操作。 3. **XPath表达式**:XPath是一种在XML文档中查找信息的语言,可以用来选取节点或节点集。在合并过程中,XPath可能被用于定位和选择需要合并的部分。 4. **数据...

    合并2个结构相同的xml文件

    在本次的任务中,我们将探讨如何使用XSL来合并两个结构相同的XML文件。 首先,理解XML文件的结构至关重要。XML文件由一系列元素组成,每个元素都有一个唯一的标签,可以包含文本、属性以及子元素。当两个XML文件...

    xml多个文件合并(delphi)

    本项目"xml多个文件合并(delphi)"提供了Delphi操作XML文件的示例代码,帮助开发者了解如何在Delphi中合并多个XML文件。 首先,我们需要理解XML文件的基本结构。XML文件由元素(Element)、属性(Attribute)、...

    c#下的xml读写函数

    自己写的c#下的xml读写函数,希望能给新手带来帮助

    python通用模块,合并xml格式文件

    将多个xml格式文件,高效合并为一个标准的xml格式文件,输出为一个xml格式文件。注:在文件层面的操作,不需要逐个解析节点。

    XML数据读写函数.类

    在C#编程中,处理XML数据通常涉及到几个关键的类和函数,这些工具使得开发者能够方便地读取、写入和操作XML文档。 在标题中提到的“XML数据读写函数.类”,我们可以推断这是C#中用于XML操作的一些自定义类或方法,...

    C# 实现的XML读写合并

    XML(eXtensible Markup Language)则是一种用于存储和传输数据的标准格式,它的结构化特性使得它在数据交换、配置文件和文档存储等方面非常有用。本教程将深入讲解如何使用C#来实现XML文件的读取、写入和合并。 ...

    Oracle的XML函数

    Oracle 中的 XML 函数是指在 Oracle 数据库中用于处理 XML 数据的函数。这些函数可以用于 SELECT 语句,也可以用于 UPDATE 和 WHERE 语句。学习这些函数可以使得保存的数据更加具有可读性。 Oracle 提供了多种 XML...

    用 xsl 中的各种函数为 XML 显示提供灵活性

    以下我们将详细探讨如何利用XSL中的各种函数为XML显示提供灵活性。 1. **字符串处理函数**: - `string()`:将值转化为字符串。 - `concat()`:连接多个字符串。 - `substring()`:提取字符串的一部分。 - `...

    flex-xml合并,树查找xml

    在Flex中,我们可以利用XML对象的appendChild()方法将一个XML节点添加到另一个XML节点的末尾,从而实现XML文档的合并。同时,还可以使用XMLList的concat()方法将多个XMLList对象组合成一个新的XMLList。 接下来,...

    XML头文件与cpp函数

    总的来说,TinyXML库为C++开发者提供了一个简单易用的XML处理工具,通过理解和应用TinyXML头文件和cpp函数,我们可以方便地在项目中读取、写入和操作XML数据。这个库的轻量级特性使得它成为嵌入式系统和其他资源受限...

    DUILIB加载XML界面源码

    - 如何在XML中定义控件和事件处理函数,以及如何在C++代码中映射这些函数。 通过阅读和理解这个源码,你可以了解到DUILIB如何利用XML来实现灵活的界面设计,以及如何通过C++代码控制和扩展这个过程。这对于深入学习...

    xml操作的类及常用函数的使用例子

    这个压缩包中的内容可能是关于如何在VC++环境下使用特定的XML操作类和函数的实例教程。 首先,让我们讨论XML的基本概念。XML文档由一系列元素构成,每个元素可以有属性、子元素和文本内容。元素通过开始标签和结束...

    C# XML文件对象增删改操作项目示例

    通过这样的项目示例,开发者可以学习到如何在实际项目中操作XML文件,这对于数据持久化和配置管理等方面的应用非常有用。同时,这个示例也展示了C#对XML的强大支持,以及如何利用面向对象的特性来处理XML数据。

    matlab开发-xml2struct

    综上所述,`xml2struct`是MATLAB开发中的一个实用工具,它利用MEX函数的优势,提供了一种快速、高效的XML数据导入方案,使得用户能够在MATLAB环境中无缝处理XML数据。在处理大量或复杂结构的XML数据时,这种工具的...

    合并eclipse项目的xml和assets的python脚本

    当eclipse项目add library后,运行项目时,eclipse并不会将library的assets和xml的配置,合并到项目中,此时需要手动复制所有library下的assets和AndroidManifest.xml设置到项目下的assets和xml。 这个工具可以代替...

    基于tinyxml2的xml操作库再封装

    在项目中,可能包括以下关键类或函数: - `XMLDocument`:代表整个XML文档,提供加载、保存和根节点的访问功能。 - `XMLElement`:表示XML的元素节点,包含子节点、属性等信息,提供添加、删除和查找子元素的方法。...

Global site tag (gtag.js) - Google Analytics