SQL(WITHAS函数调用)把一条信息拆成多张图片
原创未处理之前表数据格式,如下图:
这张图只要看我划红线的两列就可以了,RoomID(会议室ID) 、AttendPerson(参会人员ID,多个以逗号分隔);
我遇到的问题是,根据用户ID查询某个用户,所有参会的记录,直接用LIKE是不行的,所以就用了以下方法如下:
if exists (select * from tempdb.dbo.sysobjects where id = object_id(Ntempdb..#OA_Mettingresult) and type=U)
drop table #OA_Mettingresult;
WITH testtb2 AS
( SELECT ID, A.AttendPerson, CHARINDEX(,, A.AttendPerson + ,) AS STA, CHARINDEX(,, A.AttendPerson + ,) - 1 AS LENS
FROM tbt_MeetingInfo AS A UNION ALL
SELECT ID, AttendPerson, CHARINDEX(,, AttendPerson + ,, STA + 1) AS STA, CHARINDEX(,, AttendPerson + ,, STA + 1) - STA - 1 AS LENS
FROM testtb2 AS testtb2_2
WHERE (STA <> 0)
)
SELECT * INTO #OA_Mettingresult FROM(SELECT ID as MeetingID,SUBSTRING(AttendPerson, STA - LENS, LENS) AS UserID
FROM testtb2
WHERE (STA <> 0)) as a
(讲解一下这段SQL:
第一、二行我就不说了,就是删除临时表的;
第五、六行中的SELECT语句查出第一个ID,要截取的长度和位置(如下图(一));
第七、八、九行SELECT就是递归出,剩下每个ID需要截取的长度和位置(如下图(二));
最后根据WITH AS得出的结果,按照每一行需要截取的长度和位置,进行SubString就搞定了(如下图(三));)
图(一)
图(二)
这是最后处理的结果如下图(三):
这里使用了 WITH AS递归 的方式,也是第一次用,所以想具体了解它的用法可以 https://www.cnblogs.com/lsgsanxiao/p/5779527.html 去这里看一下,也可以自行百度。
版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除
上一篇:C#中xml的顺序化和反序列 下一篇:C#一维数据函数为层级计算