我正在尝试将单列值拆分为多行,拆分文本对我来说似乎是可行的,但我也希望新行是根据其他列值创建的。
| 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 |
答案 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