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

3

我正在尝试将单列值拆分为多行,对于拆分文本似乎我已经成功了,但我还希望基于另一个列的值创建新的行。

| 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个回答

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

如果您正在使用SQL Server 2016及以上版本,您可以使用SPLIT_STRING函数。查看演示

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

-1
如果您在所提及的 SQL 函数中有一个用户定义的 SQL 分割函数,则可以按照以下方式构建 SQL SELECT 语句。
select
    Order_id, Customer, p.val as Product
from MyOrders o
cross apply dbo.Split(o.Product, ',') p

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接