MSSQL 行转列 列转行


前言

多行数据转成一列
一列数据,如逗号隔开,转多条记录


一、多行转成一列,以逗号隔开

示例:

create table userinfo(
	name varchar(100)
)
insert into userinfo(name) values('陈某某')
insert into userinfo(name) values('王某某')

-- 未转前的记录
select * from userinfo

-- stuff 去掉第一个逗号
select stuff((
	-- 多行转成一列,以逗号隔开
	select ',' + cast(name as varchar(10)) from userinfo
for xml path('') ),1,1,'') as 中奖名单

效果:
在这里插入图片描述

二、一列转多行

通过切割达到实现目的

1.引入库

代码如下(示例):

-- 切割
select * from f_split('陈某某,王某某',',') 
-- 运用场景
select *,'' 其它字段1,'' 其它字段2  from userinfo where name in(select value from f_split('陈某某,王某某',','))

2.创建切割函数

代码如下(示例):

CREATE FUNCTION [dbo].[F_Split]
 (
     @SplitString nvarchar(max),  --源字符串
     @Separator nvarchar(10)=' '  --分隔符号,默认为空格
 )
 RETURNS @SplitStringsTable TABLE  --输出的数据表
 (
     [id] int identity(1,1),
     [value] nvarchar(max)
 )
 AS
 BEGIN
     DECLARE @CurrentIndex int;
     DECLARE @NextIndex int;
     DECLARE @ReturnText nvarchar(max);

     SELECT @CurrentIndex=1;
     WHILE(@CurrentIndex<=len(@SplitString))
         BEGIN
             SELECT @NextIndex=charindex(@Separator,@SplitString,@CurrentIndex);
             IF(@NextIndex=0 OR @NextIndex IS NULL)
                 SELECT @NextIndex=len(@SplitString)+1;
                 SELECT @ReturnText=substring(@SplitString,@CurrentIndex,@NextIndex-@CurrentIndex);
                 INSERT INTO @SplitStringsTable([value]) VALUES(@ReturnText);
                 SELECT @CurrentIndex=@NextIndex+1;
             END
     RETURN;
 END

效果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值