Sérieusement? 14 000 colonnes dans une vue ? Vous avez un sérieux problème de conception ici. Cependant, si vous voulez essayer, essayez cette requête pivot dynamique. Cela fonctionne avec les données limitées que vous avez fournies :
DECLARE @ColumnList VARCHAR (MAX)
DECLARE @SQL VARCHAR(MAX)
-- Create a list of distinct Item IDs which will become column headers
SELECT @ColumnList = COALESCE(@ColumnList + ', ','') + 'ItemID' + CAST(I.ItemID AS VARCHAR(12)) FROM (SELECT DISTINCT ItemID FROM Item) I
SET @SQL = '
SELECT
ShopID, ' + @ColumnList + '
FROM
(
SELECT
s.ShopID,
ItemID = ''ItemID'' + Cast(i.ItemID as varchar(12)),
sim.ItemCost
FROM
dbo.Shop_Item_Mapping AS sim
JOIN dbo.Shop AS s ON sim.ShopID = s.ShopID
JOIN dbo.Item AS i ON SIM.ItemID = i.ItemID
) T
PIVOT
(
MIN(ItemCost)
FOR T.ItemID IN (' + @ColumnList + ')
) AS PVT'
exec (@SQL)
Noms de champ modifiés selon la question mise à jour.