我从表中得到以下输出,并想知道将值拆分为多行的最佳方法。
**凭证|公司|
InvoiceDescription**
VIV110175915 | maec | BOL013272-
VIV110174380 | maec | BOL011927/BOL011929
VIV110174478 | maec | BOL01256-, BOL012507-, BOL012508-
我需要修剪" InvoiceDescription"字段并在行上复制信息,以便数据如下。
我想要的输出:
voucher | company | InvoiceDescription
VIV110175915 | maec | BOL013272
VIV110174380 | maec | BOL011927
VIV110174380 | maec | BOL011929
VIV110174478 | maec | BOL01256
VIV110174478 | maec | BOL012507
VIV110174478 | maec | BOL012508
我使用MS SQL Server 2012来设置这些表,只需要一些关于如何拆分主题字段的帮助。
谢谢,
答案 0 :(得分:0)
这是一种不需要TVF的方法
Select A.[Voucher]
,A.[company]
,B.*
From YourTable A
Cross Apply (
Select RetSeq = Row_Number() over (Order By (Select null))
,RetVal = replace(LTrim(RTrim(B.i.value('(./text())[1]', 'varchar(max)'))),'-','')
From (Select x = Cast('<x>' + replace(replace([InvoiceDescription],'/',','),',','</x><x>')+'</x>' as xml).query('.')) as A
Cross Apply x.nodes('x') AS B(i)
) B
您可能会注意到我保留了序列,我发现它不时有用。
<强>返回强>
Voucher company RetSeq RetVal
VIV110175915 maec 1 BOL013272
VIV110174380 maec 1 BOL011927
VIV110174380 maec 2 BOL011929
VIV110174478 maec 1 BOL01256
VIV110174478 maec 2 BOL012507
VIV110174478 maec 3 BOL012508