SQL SERVER 拆分列为多行

--创建测试表
create table #temp (seq int identity,names varchar(200))
insert into #temp(names)
values(‘张三,李四‘),
(‘中国,美国,巴西‘),
(‘深圳,上海,北京,广州,哈尔滨‘),
(‘足球,篮球,乒乓球,台球‘)

目的是要将用逗号分隔的names列拆分为多行,最终要产生的结果为:

1 张三

1 李四
2 中国
2 美国
2 巴西
3 深圳
3 上海
3 北京
3 广州
3 哈尔滨
4 足球
4 篮球
4 乒乓球
4 台球

 1 ;with cte as(
 2 select 0 as n
 3 union all
 4 select N+1 from cte where n<100
 5 )
 6 ,idx as (
 7 select a.seq,b.n,ROW_NUMBER() over (partition by a.seq order by b.n) as id,‘,‘+a.names+‘,‘ as names
 8 from #temp a
 9     inner join cte b on b.n<=len(‘,‘+a.names+‘,‘ )
10 where SUBSTRING(‘,‘+a.names+‘,‘,b.n,1)=‘,‘
11 )
12 select a.seq,substring(a.names,a.n+1,b.n-a.n-1) as name
13 from idx a
14     inner join idx b on a.seq=b.seq and a.id=b.id-1
时间: 2024-11-05 20:36:02

SQL SERVER 拆分列为多行的相关文章

sql server存储过程分页,行变列

CREATE PROCEDURE [dbo].[PROC_GetPriviousAndNextDetailContent]@Index varchar(20),--表主键@Table varchar(100),--从哪个表获取数据@Columns varchar(100),--需要获取哪些字段@OrderStr varchar(100),--排序字段及方式@Where1    varchar(100),--row_number中的初步过滤条件@Where2 varchar(100)--当前要查询

SQL Server 2008 R2——PIVOT 行转列 以及聚合函数的选择

原文:SQL Server 2008 R2--PIVOT 行转列 以及聚合函数的选择 ==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完整性. 未经作者同意请勿修改(包括本声明),保留法律追究的权利. 未经作者同意请勿用于学术性引用. 未经作者同意请勿用于商业出版.商业印刷.商业引用. 本文不定期修正完善,为保证内容正确,建议移步原文处阅读. 本文

SQL Server中中数据行批量插入脚本的存储实现

看到博友SQL Server MVP桦仔的一篇博文“将表里的数据批量生成INSERT语句的存储过程的实现”.我仔细看来博文中的两个存储代码,自我感觉两个都不太满意,都是生成的单行模式的插入,数据行稍微大些性能会受影响的.所在公司本来就存在第二个版本的类似实现,但是是基于多行模式的,还是需要手工添加UNAION ALL来满足多行模式的插入.看到这边博文和基于公司数据行批量脚本的存储的确定,这次改写和增强该存储的功能. 本存储运行于SQL Server 2005或以上版本,T-SQL代码如下: 1

Oracle sql%rowcount 返回影响行数;sql server @@RowCount返回影响行数

sql server中,返回影响行数是:If @@RowCount<1 Oracle中,返回影响行数是:If sql%rowcount<1 例: sqlserver: create procedure Proc_test @Stat int=0, @MsgId varchar(50)='', AS BEGIN Update T_Mt Set Stat=@Stat,OStat=@Stat,RptTime=Getdate() Where MsgId=@MsgId If @@RowCount<

巧妙使用SQL Server编辑前200行功能

在SQL Server 2005/2008/2008 R2中,我们可以使用SQL Server自带的编辑前200行功能,使用这个功能的本意是简化Update 的使用,让开发人员.DBA和不懂T-SQL的一些人能够通过可视化界面来直接修改数据库里的数据. 在使用编辑前200行功能的时候,编辑前200行数据,简便是简便了,但是简便了以后更想直接在可视化的页面里直接编辑想要编辑的数据,而不是打开编辑界面后自动读出来的200条,自动读出来的200条顺序杂乱,本来是一个很好用的强大功能,显得有些鸡肋. 在

SQL Server中使用PIVOT行转列

1.建表及插入数据 1 USE [AdventureDB] 2 GO 3 /****** Object: Table [dbo].[Score] Script Date: 11/25/2016 4:30:50 PM ******/ 4 SET ANSI_NULLS ON 5 GO 6 7 SET QUOTED_IDENTIFIER ON 8 GO 9 10 CREATE TABLE [dbo].[Score]([Name] [varchar](50) NULL,[Subject] [varcha

SQL Server安全(10/11):行级别安全(Row-Level Security)

在保密你的服务器和数据,防备当前复杂的攻击,SQL Server有你需要的一切.但在你能有效使用这些安全功能前,你需要理解你面对的威胁和一些基本的安全概念.这篇文章提供了基础,因此你可以对SQL Server里的安全功能充分利用,不用在面对特定威胁,不能保护你数据的功能上浪费时间. 不像其它一些工业强度的数据库服务器.SQL Server对于单个数据记录,缺少内建机制,称作行级别安全(Row-Level Security).这篇文章会探寻为什么你可能想使用这样的行级别颗粒的数据访问安全和你如何能

【转修正】sql server行版本控制的隔离级别

在SQL Server标准的已提交读(READ COMMITTED)隔离级别下,一个读操作会和一个写操作相互阻塞.未提交读(READ UNCOMMITTED)虽然不会有这种阻塞,但是读操作可能会读到脏数据,这是大部分用户不能接受的.有些关系型数据库(例如Oracle)使用的是另一种处理方式.在任何一个修改之前,先对修改前的版本做一个复制[WX1] ,后续的一切读操作都会去读这个复制的版本,修改将创建一个新的版本.在这种处理方式下,读.写操作不会相互阻塞.使用这种行版本控制机制的好处,是程序的并发

SQL Server索引 - 聚集索引、非聚集索引、非聚集唯一索引 &lt;第八篇&gt;

聚集索引.非聚集索引.非聚集唯一索引 我们都知道建立适当的索引能够提高查询速度,优化查询.先说明一下,无论是聚集索引还是非聚集索引都是B树结构. 聚集索引默认与主键相匹配,在设置主键时,SQL Server会默认在主键列创建聚集索引.但是可以手动更改为在任意一个列创建聚集索引,然后在另一个字段或多个字段上定义主键.这时主键将会被作为一个唯一的非聚集索引(唯一索引)被创建.通过指定NONCLUSTERED关键字就可以做到. CREATE TABLE MyTableKeyExample { Colu