Je kunt de YP
gemakkelijk splitsen tekenreeks met LEFT()
, RIGHT()
, SUBSTRING()
, enz. Mijn suggestie zou zijn hoe u omgaat met uw UNPIVOT
. Het lijkt erop dat u veel kolommen moet UNPIVOT
dus mijn suggestie zou kunnen zijn om dynamische SQL te implementeren om deze query uit te voeren. Je zou het op deze manier doen:
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)