В качестве альтернативы для запроса PIVOT, вы можете создать вид, подобный этому:
create view dbo.myview
as
select
fish.ID
, fish.Name
, len.Value as Length
, gir.Value as Girth
, wei.Value as Weight
from fish
left join fishproperty len
on len.fishid = fish.id
and len.property = 'Length'
left join fishproperty gir
on gir.fishid = fish.id
and gir.property = 'Girth'
left join fishproperty wei
on wei.fishid = fish.id
and wei.property = 'Weight'
Если вы не знаете столбцы заблаговременно, единственное решение, о котором я могу подумать, - это динамически сгенерировать запрос и использовать «exec sp_executesql» для его выполнения. Например:
declare @query nvarchar(4000)
set @query = 'select ... from fish'
-- For each column
set @query = @query + ' left join fishproperty ' +
propname + ' on ' + propname + '.fishid = fish.id ' +
'and ' + propname + '.property = ''' + propname + ''' '
exec sp_executesql @query
Предупреждение: динамические запросы могут быть головной болью при обслуживании.