Освен ако не пропускам нещо в обяснението ви, тогава нямате нужда от AttributeMask
. Ако крайните имена на колони просто ще бъдат оригиналните имена на колони и след това Kind
стойности, тогава можете да използвате:
select *from( select LotId, SomeText, col+'_'+Kind col, value from ( select l.LotId, l.SomeText, cast(a.AttributeId as varchar(8)) attributeid, cast( a.LotId като varchar(8)) a_LotId, a.Val, a.Kind от @Lot l ляво присъединяване към @Attribute a на l.LotId =a.LotId ) src cross apply ( values ('attributeid', attributeid),( 'LotId', a_LotId), ('Value', Val), ('Kind', Kind) ) c (col, value)) dpivot( max(value) for col in (attributeid_Kind1, LotId_Kind1, Value_Kind1, Kind_Kind1, attributeid_Kind2, LotId_Kind2, Value_Kind2, Kind_Kind2, attributeid_Kind3, LotId_Kind3, Value_Kind3, Kind_Kind3)) piv;
Вижте SQL Fiddle с демонстрация . Това дава резултата:
<предварителен код>| ЛОТИД | НЯКАКЪВ ТЕКСТ | ATTRIBUTEID_KIND1 | LOTID_KIND1 | VALUE_KIND1 | KIND_KIND1 | ATTRIBUTEID_KIND2 | LOTID_KIND2 | VALUE_KIND2 | KIND_KIND2 | ATTRIBUTEID_KIND3 | LOTID_KIND3 | VALUE_KIND3 | KIND_KIND3 |------------------------------------------------ -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -----| 1 | WithAll | 1 | 1 | Foo1 | Вид1 | 2 | 1 | Foo2 | Вид2 | 3 | 1 | Foo3 | Вид 3 || 2 | Здравейте | (нула) | (нула) | (нула) | (нула) | 10 | 2 | Бар2 | Вид2 | (нула) | (нула) | (нула) | (нула) || 3 | Свят | (нула) | (нула) | (нула) | (нула) | (нула) | (нула) | (нула) | (нула) | 12 | 3 | Бар3 | Вид3 |