将单个文本单元格拆分为多行,并复制其他列

时间:2018-02-16 05:33:17

标签: sql sql-server

我正在尝试将单列值拆分为多行,拆分文本对我来说似乎是可行的,但我也希望新行是根据其他列值创建的。

| Order_id|  Customer| Product |
----------------------------------------------
| 1       |  John    | table, chair, cabinet |
| 2       |  Bob     | table, chair  |
| 3       |  Dylan   | cabinet |

我想要的结果如下:

| Order_id|  Customer| Product |
----------------------------------------------
| 1       |  John    | table |
| 1       |  John    | chair |
| 1       |  John    | cabinet |
| 2       |  Bob     | table |
| 2       |  Bob     | chair |
| 3       |  Dylan   | cabinet |

3 个答案:

答案 0 :(得分:1)

如果您不使用SQL Server +12,那么XML节点方法可能会有所帮助。

select 
       Order_id, Customer,
       ltrim( P.value('.', 'varchar(max)'))  Product
from
(
       select Order_id, Customer,
              cast('<X>'+replace(Product , ',', '</X><X>')+'</X>' as xml) Product
       from table
)a cross apply Product.nodes ('/X') as Product(P)

答案 1 :(得分:1)

因此,如果您使用的是SQL Server 2016及更高版本,则可以使用SPLIT_STRING功能。 See working demo

SELECT Order_Id, Customer, value  
FROM tblOrder
    CROSS APPLY STRING_SPLIT(Product, ','); 

答案 2 :(得分:-1)

如果您将用户定义的SQL split function作为引用资源中提到的SQL函数之一,则可以按如下方式构建SQL SELECT语句

select
    Order_id, Customer, p.val as Product
from MyOrders o
cross apply dbo.Split(o.Product, ',') p