如何拆分查询结果以在MSSQL中创建新表?

时间:2019-03-07 12:02:10

标签: sql sql-server

我想在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函数,但是效果不佳。

2 个答案:

答案 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