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

SQL2005下利用XML进行项目的合并与拆分

阅读更多

SQL2005下利用XML进行项目的合并与拆分<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

作者:HappyFlyStone

转载请注明出处

  通常情况下我们对相同数值项目进行分组求和,那是相当的简单啦,只要select.. group by加聚合函数就行了,可是对于串一类的项目进行合并时就不这么简单了,同样分解一个按指定分隔符分隔的串或分析指定位置的串,在下我们通常是创建一个函数,然后分组或提取就行了,现我们主要讨论在下利用xml来完成这个工作。

  1、先来一个简单点,如下的例子对aaa相同的项目合并。

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

-- Author: HappyFlyStone

-- Date : 2009-01-04 20:57:59

-- Ver: 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 NT5.0(Build 2195: Service Pack 4)

--

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

-- Test Data: tb

IF OBJECT_ID('tb') IS NOT NULL

DROP TABLE tb

Go

CREATE TABLE tb(aaa INT,bbb INT)

Go

INSERT INTO tb

SELECT 1,2 UNION ALL

SELECT 1,3 UNION ALL

SELECT 1,4 UNION ALL

SELECT 2,2 UNION ALL

SELECT 2,5

GO

--查询1

select

aaa,

[values]=stuff(replace(replace((select [bbb]

from tb

where aaa=t.aaa for xml AUTO),

'"/><tb bbb="',','),

'"/>',''),1,9,'')

from tb t

group by aaa

--查询2

SELECT *

FROM(

SELECT DISTINCT

aaa

FROM tb

)A

OUTER APPLY(

SELECT

[bbb]= STUFF(REPLACE(REPLACE(

(

SELECT [bbb] FROM tb N

WHERE aaa = A.aaa

FOR XML AUTO

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

)N

--查询3

select

aaa,

[values]=stuff((select ','+ltrim([bbb])

from tb t

where aaa=tb.aaa for xml path('')), 1, 1, '')

from tb

group by aaa

drop table tb

--查询结果

/*

aaa values

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

1 2,3,4

2 2,5

(2 行受影响)

*/

2、来个两个表关联操作并实现行列转换的

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

-- Author: HappyFlyStone

-- Date : 2009-01-04 20:57:59

-- Ver: 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 NT5.0(Build 2195: Service Pack 4)

--

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

-- Test Data: ta

IF OBJECT_ID('ta') IS NOT NULL

DROP TABLE ta

Go

CREATE TABLE ta(pid INT,tid INT,name NVARCHAR(6))

Go

INSERT INTO ta

SELECT 1,1,'hy3500' UNION ALL

SELECT 1,2,'aabbcc' UNION ALL

SELECT 2,3,'1111' UNION ALL

SELECT 2,4,'2222'

GO

-- Test Data: tb

IF OBJECT_ID('tb') IS NOT NULL

DROP TABLE tb

Go

CREATE TABLE tb(NAME NVARCHAR(2),id INT)

Go

INSERT INTO tb

SELECT '型号',1 UNION ALL

SELECT '参数',2

GO

--Start

SELECT t.[name],A,B

FROM(

SELECT

B.[NAME],

CAST((SELECT [name] FROM TA WHERE PID = A.PID FOR XML PATH('')) AS XML) AS X

FROM TA A

border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; padding-bottom: 0cm; margin: 0cm 0cm 0pt; border-left: medium none; padding-top: 0cm; border-bottom: medium n

分享到:
评论

相关推荐

    XML数据写入SQL数据库的方法.pdf

    XML数据结构可能与SQL数据库表结构不完全匹配,因此需要进行数据映射和转换。这一步骤可能涉及字段名的对应、数据类型的转换以及复杂数据结构(如嵌套元素或属性)的拆分。例如,一个XML元素可能需要映射到数据库的...

    升级到SQL Server 2005的10大理由.pdf

    微软SQL Server是一款广泛使用的企业级关系型数据库管理系统(RDBMS),自从2000年版本发布以来,已经经历了多个版本的更新与改进。在2005年发布的SQL Server 2005,相较于其前一版本SQL Server 2000,做出了许多...

    SQL语句行数据拆成多行及多行数据合并成一行的方法.docx

    在 SQL Server 2005 及更高版本中,可以利用 XML 数据类型来轻松地拆分字符串。 ```sql SELECT a.COl1, b.Col2 FROM ( SELECT Col1, COl2 = CONVERT(XML, '&lt;root&gt;&lt;v&gt;' + REPLACE(COl2, ',', '&lt;/v&gt;&lt;v&gt;') + '&lt;/v&gt;&lt;/...

    SQL.Server.Integration.Services.Using.Visual.Studio.2005

    《SQL Server Integration Services 使用 Visual Studio 2005:初学者指南》是Jayaram Krishnaswamy撰写的一本深入探讨如何使用Visual Studio 2005进行SQL Server Integration Services(SSIS)开发的书籍。...

    Oracle字段转字符串/多行记录合并/连接/聚合字符串的几种方法

    在Oracle数据库中,有时我们需要将多个字段值转换为单个字符串,或者将多行记录合并成一行,这在数据处理和报告生成时尤其常见。Oracle提供了多种方法来实现这一目标,包括使用内置函数、PL/SQL过程以及一些高级特性...

    实战Oracle SQL调优 hint特性

    - `NO_XML_QUERY_REWRITE`:指示不进行XML查询重写。 - `QB_NAME`:指示查询块名称。 #### 五、实战应用案例 **案例1**:使用`ALL_ROWS`提高大数据量查询性能 ```sql SELECT /*+ ALL_ROWS */ * FROM large_table...

    ASP EXCEL导入SQL

     文件服务器与应用服务器是分布式的,通过Map-Reduce进行任务的拆分与结果的合并,充分利用多台服务器的并行计算能力,提升整体平台的运行性能;  文件缓存采用多级缓存策略,解决命中率高的文件的频繁请求。而...

    解析SQLServer任意列之间的聚合

    在这种情况下,可以采用一种巧妙的方法,通过XML的处理将多列合并成单个列,然后使用XQuery转换为行集,最后应用聚合函数。本文将详细介绍这一方法,并提供一个测试案例。 首先,我们需要创建一个测试环境。在本例...

    SSM电商项目.rar

    MyBatis是一个持久层框架,它简化了Java与数据库的交互,通过XML或注解方式配置SQL语句,将SQL与Java代码分离。在SSM项目中,MyBatis作为数据访问层,与数据库进行交互。它可以灵活地执行复杂的SQL查询,支持存储...

    Java SSM基于HTML仿淘宝购物系统【优质毕业设计、课程设计项目分享】

    - 购物车模块:添加、删除、修改购物车商品数量,合并与拆分订单。 - 订单模块:生成订单、支付处理、订单状态跟踪。 - 收货地址管理:添加、编辑、删除收货地址。 - 评论模块:用户对商品进行评价、晒单。 6. ...

    SSM大型互联网电商项目.zip

    它允许开发者直接编写SQL,通过Mapper接口和XML配置文件将SQL与Java方法绑定,实现了数据访问的动态化和定制化。 在大型互联网电商项目中,高并发和大数据处理是关键挑战。SSM框架允许使用缓存技术(如Redis或...

    学习心得-《如何利用Excel高效地处理数据》.pdf

    文章列举了一系列实际应用案例,如利用PQ进行动态数据汇总、数据合并拆分、网页数据抓取、多表记录合并、透视列应用、行列管理等,展示了如何通过PQ实现各种复杂的数据处理任务。 知识点七:高级技巧 PQ还支持SQL...

    本科毕设-课设作业-基于Springboot SSM框架+Mysql的电子商务商城项目.zip

    8. **开发与部署**:项目开发过程中,可能会使用Git进行版本控制,Maven或Gradle进行依赖管理,IntelliJ IDEA或Eclipse作为IDE。完成开发后,通过Docker容器化部署,实现快速、一致的环境搭建。 9. **测试**:单元...

    基于 MySQL+Tomcat+Servlet+JSP 的简单作业管理系统源码+数据库+项目说明.zip

    - 所有模块合并至 **web-mvc**,其他模块留作存档 - 拆分 controller 和 service - 使用 lombok 重构 model - 使用 MyBatis 进行数据库连接 ### Ver 4.0 - 实现数据库操作的事务管理 - 添加 AOP 依赖 - 使用 AOP ...

    Cobar说明文档

    - `schema.xml`:定义了schema逻辑层次图中的所有元素,并利用这些元素以及`rule.xml`来指定具体的路由规则和数据分布策略。 #### 四、管理手册 - **管理入口**:提供了管理Cobar的入口点。 - **监控命令**:用于...

    cobar的使用说明

    - **分库情况下,insert语句必须包含拆分字段列名**:在进行数据插入时,如果涉及到分库,则插入语句必须明确指定拆分字段。 - **分库情况下,update语句不能更新拆分字段的值**:这意味着在执行更新操作时,不允许...

    基于SSM框架+mysql的电子商城web系统项目源码.zip

    4. 购物车:用户可以添加商品到购物车,调整数量,合并或拆分订单,这部分功能需要处理好并发和数据一致性问题。 5. 分类与搜索:商品分类和搜索功能,可能需要实现Elasticsearch或其他搜索引擎的集成,提高查询...

    表的相关查询(最全面的查询语句集合)

    - **SQL 2005 以上版本可以结合 APPLY 进行拆分列值**:使用 `APPLY` 函数配合表值函数实现字符串拆分。 ### FOR XML PATH 语句的应用 `FOR XML PATH` 是 SQL Server 中一种非常强大的功能,用于将结果集转换成 XML...

    基于ssm+mysql+Apriori算法的网络书城源码数据库.zip

    MyBatis则是一个持久层框架,它简化了数据库操作,通过XML或注解方式配置SQL,将Java对象与数据库表映射起来,实现了DAO(数据访问对象)层的便捷开发。 接着,MySQL是一个广泛使用的开源关系型数据库管理系统,以...

Global site tag (gtag.js) - Google Analytics