Bạn có thể dễ dàng tách YP chuỗi sử dụng LEFT() , RIGHT() , SUBSTRING() , v.v. Đề xuất của tôi sẽ là cách bạn xử lý UNPIVOT của mình . Có vẻ như bạn có nhiều cột để UNPIVOT vì vậy đề xuất của tôi có thể là triển khai SQL động để thực hiện truy vấn này. Bạn sẽ làm theo cách này:
declare @colsUnpivot varchar(max),
@query AS NVARCHAR(MAX),
@cols varchar(max)
select @colsUnpivot = stuff((select ','
+quotename(replace(C.name, 'Qty', ''))
from sys.columns as C
where C.object_id = object_id('yourtable') and
C.name like 'Qty%'
for xml path('')), 1, 1, '')
select @cols = stuff((select ','
+quotename(C.name) + ' as ' + replace(C.name, 'Qty', '')
from sys.columns as C
where C.object_id = object_id('yourtable') and
C.name like 'Qty%'
for xml path('')), 1, 1, '')
set @query
= 'select rowid,
left(YP, 1) YP,
cast(right(YP, len(YP) - 1) as int) period,
Val
from
(
select rowid, ' + @cols + '
from yourtable
) x1
unpivot
(
val for YP IN (' + @colsUnpivot + ')
) u'
exec(@query)