`

合并分拆表

阅读更多
--合并分拆表
/******************************************************************************************************************************************************
合并分拆表数据

整理人:中国风(Roy)

日期:2008.06.06
******************************************************************************************************************************************************/

--> --> (Roy)生成測試數據
 
if not object_id('Tab') is null
    drop table Tab
Go
Create table Tab([Col1] int,[Col2] nvarchar(1))
Insert Tab
select 1,N'a' union all
select 1,N'b' union all
select 1,N'c' union all
select 2,N'd' union all
select 2,N'e' union all
select 3,N'f'
Go

合并表:

SQL2000用函数:

go
if object_id('F_Str') is not null
    drop function F_Str
go
create function F_Str(@Col1 int)
returns nvarchar(100)
as
begin
    declare @S nvarchar(100)
    select @S=isnull(@S+',','')+Col2 from Tab where Col1=@Col1
    return @S
end
go
Select distinct Col1,Col2=dbo.F_Str(Col1) from Tab

go

SQL2005用XML:

方法1:

select 
    a.Col1,Col2=stuff(b.Col2.value('/R[1]','nvarchar(max)'),1,1,'')
from 
    (select distinct COl1 from Tab) a
Cross apply
    (select COl2=(select N','+Col2 from Tab where Col1=a.COl1 For XML PATH(''), ROOT('R'), TYPE))b

方法2:

select 
    a.Col1,COl2=replace(b.Col2.value('/Tab[1]','nvarchar(max)'),char(44)+char(32),char(44))
from 
    (select distinct COl1 from Tab) a
cross apply
    (select Col2=(select COl2 from Tab  where COl1=a.COl1 FOR XML AUTO, TYPE)
                .query('<Tab>
                {for $i in /Tab[position()<last()]/@COl2 return concat(string($i),",")}
                {concat("",string(/Tab[last()]/@COl2))}
                </Tab>')
                )b

SQL05用CTE:

;with roy as(select Col1,Col2,row=row_number()over(partition by COl1 order by COl1) from Tab)
,Roy2 as
(select COl1,cast(COl2 as nvarchar(100))COl2,row from Roy where row=1 
union all 
select a.Col1,cast(b.COl2+','+a.COl2 as nvarchar(100)),a.row from Roy a join Roy2 b on a.COl1=b.COl1 and a.row=b.row+1)
select Col1,Col2 from Roy2 a where row=(select max(row) from roy where Col1=a.COl1) order by Col1 option (MAXRECURSION 0)


生成结果:
/*
Col1        COl2
----------- ------------
1           a,b,c
2           d,e
3           f

(3 行受影响)
*/


拆分表:

--> --> (Roy)生成測試數據
 
if not object_id('Tab') is null
    drop table Tab
Go
Create table Tab([Col1] int,[COl2] nvarchar(5))
Insert Tab
select 1,N'a,b,c' union all
select 2,N'd,e' union all
select 3,N'f'
Go

SQL2000用辅助表:
if object_id('Tempdb..#Num') is not null
    drop table #Num
go
select top 100 ID=Identity(int,1,1) into #Num from syscolumns a,syscolumns b
Select 
    a.Col1,COl2=substring(a.Col2,b.ID,charindex(',',a.Col2+',',b.ID)-b.ID) 
from 
    Tab a,#Num b
where
    charindex(',',','+a.Col2,b.ID)=b.ID --也可用 substring(','+a.COl2,b.ID,1)=','


SQL2005用Xml:

select 
    a.COl1,b.Col2
from 
    (select Col1,COl2=convert(xml,'<root><v>'+replace(COl2,',','</v><v>')+'</v></root>') from Tab)a
outer apply
    (select Col2=C.v.value('.','nvarchar(100)') from a.COl2.nodes('/root/v')C(v))b




SQL05用CTE:

;with roy as 
(select Col1,COl2=cast(left(Col2,charindex(',',Col2+',')-1) as nvarchar(100)),Split=cast(stuff(COl2+',',1,charindex(',',Col2+','),'') as nvarchar(100)) from Tab
union all
select Col1,COl2=cast(left(Split,charindex(',',Split)-1) as nvarchar(100)),Split= cast(stuff(Split,1,charindex(',',Split),'') as nvarchar(100)) from Roy where split>''
)
select COl1,COl2 from roy order by COl1 option (MAXRECURSION 0)

生成结果:
/*
Col1        COl2
----------- -----
1           a
1           b
1           c
2           d
2           e
3           f
*/

 

分享到:
评论

相关推荐

    电子表格一键合并与拆分工具箱

    它简化了在日常工作中对Excel表格进行批量操作的过程,无论是需要将多个工作表或工作簿合并成一个,还是需要将一个大的工作表拆分成多个小的部分,这个工具都能轻松实现。下面,我们将深入探讨该工具的功能、应用...

    按照百十个位分拆链表,然后组合排序

    ### 按照百十个位分拆链表,然后组合排序 #### 背景介绍 本篇文章将探讨一种基于C语言实现的特殊排序方法——按照数字的个、十、百位来对链表中的元素进行分组和排序。这种方法在特定场景下能够有效地对一组较小...

    Word文档的拆分合并

    子文档之间则通过分节符隔开。 ##### 步骤三:保存子文档 - **保存主文档**:将主文档保存下来,同时Word会自动保存创建的所有子文档,并以各子文档的第一行文本作为文件名。 #### 三、其他注意事项 - **格式一致...

    DataGridview做的二维表头 合并单元格

    在某些场景下,为了更好地组织和呈现复杂的数据结构,我们可能需要创建带有二维表头的表格,甚至需要合并单元格。本篇将详细讲解如何在`DataGridView`中实现这种功能,特别关注“二维表头”和“合并单元格”的实现。...

    mysql_一列分多行操作,在一个表里的几行数据需要分拆成单行存储到一行中

    mysql_一列分多行操作,在一个表里的几行数据需要分拆成单行存储到一行中,mysql_一列分多行操作,在一个表里的几行数据需要分拆成单行存储到一行中 mysql_一列分多行操作,在一个表里的几行数据需要分拆成单行存储...

    PDF文件分拆、合并工具,带C#源码

    有时我们需要将一个大PDF文件拆分成多个小文件,或者将多个PDF文件合并成一个,这就需要用到PDF的分拆与合并功能。本资源提供了一个具备这些功能的工具,并且带有C#语言的源码,对于学习和开发来说非常有价值。 ...

    excel 按列拆分、合并、自动分类

    excel 按列拆分、合并、自动分类 能自动分类表格,合并多电子表格,合并指定目录下所有xlsx 功能测试完善,判断优化,确保能正常运行

    IE浏览器选项卡的移动、分拆与合并.docx

    本文将详细介绍如何在IE浏览器中有效地移动、分拆和合并选项卡,帮助你更好地组织和管理你的浏览窗口。 首先,我们来学习如何移动选项卡。在IE浏览器中,当你需要调整选项卡的位置时,只需左键单击想要移动的选项卡...

    文件的上传拆分合并

    在IT行业中,文件的上传、拆分和合并是常见的操作,尤其在大数据处理、网络传输以及云存储场景中。这两个Java文件,UploadJPG.java和SplitFile.java,可能分别涉及到了文件上传和文件拆分的功能。现在我们来详细探讨...

    pdf合并拆分

    当一个PDF摆在你的面前,但安是混乱的?当你扫描过后,形成PDF了,但是发现顺序不对,怎么办?你要在一个PDF文件后面加几页,怎么办?就用它吧,让你的工作更轻松。好不容易找到的,分略高了一点,抱歉。PDF的软件

    尼康相机D5100固件分拆和合并

    D5100固件由两个文件拼接,本程序负责分拆和拼接

    利用Python程序对Excel数据进行分拆,合并,整理的数据分析代码

    利用Python程序对Excel数据进行分拆,合并,整理的数据分析代码

    PNG拆分合并

    本篇文章将重点讲解PNG图像的拆分与合并操作。 PNG拆分合并工具是一个实用程序,专门用于处理PNG图像文件。它允许用户将多个PNG图像合并为一个单一的文件,同时也能够将一个大的PNG文件拆分为多个独立的部分。这个...

    net客户端 文件任意分割合并(版本二)

    1、用asp.net开发的客户端 2、可以把任意大体积文件,自定义大小分割成若干个小文件 3、可将若干个小文件,合并为一个新的整文件 4、必须安装net3.5运行环境 5、第一次学习winform开发,这是我的第一个作品,欢迎...

    文件拆分合并工具

    非常傻瓜的一个文件拆分合并工具,可以将大的文件拆分或多个小文件或是将拆分后的文件 ...如果文件名为A.B,折分后的文件名为 A.B.001,A.B.002,A.B.003.... 在合并时指定头文件A.B.001,再按“合并”按纽即可。

    敏捷PPT拆分合并工具(PPT文档拆分)v1.7官方免费安装版

    敏捷PPT批量拆分合并工具可以批量将PPT文档按页或份数分拆为多个 Powerpoint 文件,或将多个ppt文件合并为一个 Powerpoint 文档。拆分方式可以按幻灯片页拆分,如每10页或20页拆分为一份 Powerpoint 文档。也可以按...

    将多个相同结构的表格合并到一起的脚本,也可以根据索引来将EXCEL分拆成多个表格

    EXCEL宏脚本,可将多个同样的表格合并到一起,并可以将总表按索引分拆为多个单独表格。适合集中修改多个设备的参数配置表,将配置导入表汇总到一个总表,修改完某一参数之后根据设备编号分拆为单独的配置表格。免去...

    敏捷Word批量拆分合并工具v1.3安装版

    敏捷Word批量拆分合并工具可以批量将Word文档按页或份数分拆为多个Word文件,或将多个Word文件合并为一个Word文档。 需要的朋友们赶紧下载试一试吧Word批量拆分合并工具更新: 新版本增加了输出新文件命名方式新功能

    Excel拆分和合并工具

    1. 合并多个工作表:可以将多个工作簿中的工作表整合到一个新的工作簿中。 2. 合并多个工作簿:如果每个文件都是独立的工作簿,工具也能将其合并为一个大的工作簿。 3. 自定义排序:在合并过程中,用户还可以选择...

Global site tag (gtag.js) - Google Analytics