Na serio? 14.000 kolumn w widoku? Masz tutaj poważny problem z projektem. Jeśli jednak chcesz spróbować, wypróbuj to dynamiczne zapytanie przestawne. Działa z ograniczonymi danymi, które podałeś:
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)
Edytowane nazwy pól zgodnie ze zaktualizowanym pytaniem.