Sie können den YP
ganz einfach aufteilen Zeichenfolge mit LEFT()
, RIGHT()
, SUBSTRING()
usw. Mein Vorschlag wäre, wie Sie mit Ihrem UNPIVOT
umgehen . Es sieht so aus, als hätten Sie viele Spalten zum UNPIVOT
Daher könnte mein Vorschlag sein, dynamisches SQL zu implementieren, um diese Abfrage auszuführen. Sie würden es so machen:
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)