SqlServer技巧:使用APPLY替代游标解决逐行运算问题

本文介绍了如何在SQLServer中使用APPLY操作符替代游标来解决逐行运算的问题,特别是在处理表与表值函数的关联,以及获取每个客户前三笔交易信息的情景下,APPLY提供了更高效的方法。
摘要由CSDN通过智能技术生成

使用情形:

1. 想将某表关联表值函数返回的表

例如:某表有Col1,Col2两列,想将Col2中的文本拆分为多行,并在拆分后保留Col1和Col2的对应关系

--方法1:使用游标,逐行拆分后拼接(略)
--方法2:使用APPLY进行逐行运算

--表值函数 dbo.SplitString:按照分隔符将文本转换为表
declare @str1 varchar(max)
set @str1 = '7,8,9'
SELECT * FROM dbo.SplitString(@str1,',',1)

--示例:某表有Col1,Col2两列,想将Col2中的文本拆分为多行,并在拆分后保留Col1和Col2的对应关系
CREATE TABLE #TMP(
	NAME VARCHAR(100) NULL,
	STRING VARCHAR(MAX) NULL
)
TRUNCATE TABLE #TMP
INSERT INTO #TMP(NAME, STRING)
VALUES('TEST111','2,3,4'),
('TEST222','6,7'),
('TEST222',null)

--方法1:使用游标,逐行拆分后拼接(略)
--方法2:使用APPLY进行逐行运算
--根据某列一行变多行,并保留其他列的对应关系
SELECT C.NAME, A.Value
FROM #TMP C
CROSS APPLY dbo.SplitString(C.STRING,',',1) A --去除NULL列

SELECT C.NAME, A.Value
FROM #TMP C
OUTER APPLY dbo.SplitString(C.STRING,',
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值