我想在MSSQL中拆分查询结果。
示例如下:
ID (PK) BorrowID
1 1,3,4
2 4,5
3 2,3
4 1,6
5 2,7
我想使用上表数据创建新表。
NewID(PK) ID BorrowID
1 1 1
2 1 3
3 1 4
4 2 4
5 2 5
所以我想拆分BorrowID数据以创建新表。
我怎么得到这个?
我已经尝试使用SUBSTRING,CHARINDEX函数,但是效果不佳。
答案 0 :(得分:1)
您可以尝试此操作以获取MSSQL中逗号分隔列表的各个值,
SELECT row_number() OVER (ORDER BY ID,BorrowID) as NewID,ID,BorrowID
FROM ( SELECT A.*,
Split.a.value('.', 'VARCHAR(100)') AS [BorrowID]
FROM
(
SELECT ID,
CAST ('<M>' + REPLACE( [BorrowID], ',', '</M><M>') + '</M>' AS XML) AS Data
FROM [Table]
) AS A CROSS APPLY [Data].nodes ('/M') AS Split(a))d;
答案 1 :(得分:1)
如果您使用的是Sql Server 2016+,则可以使用String_split:
select ROW_NUMBER() over (order by t1.id, t2.borrowid) as newid, t1.id, t2.borrowid
from t1
cross apply (select value as borrowid from string_split(t1.borrowid, ',')) as t2
返回:
newid id borrowid
1 1 1
2 1 3
3 1 4
4 2 4
5 2 5
6 3 2
7 3 3