Prueba esto:
SELECT fromcity
,[Vskp]=isnull([Vskp],0)
,[Hyd]=isnull([Hyd],0)
,[Chennai]=isnull([Chennai],0)
FROM ( SELECT fromcity ,tocity,Dist
FROM DistanceTable
union
SELECT tocity,fromcity ,Dist
FROM DistanceTable
) AS ET
PIVOT
(max(dist) FOR tocity IN ([Vskp],[Hyd],[Chennai])
) AS PT
Actualización: Use SQL dinámico para el número variable de ciudades como se muestra a continuación:
DECLARE
@cols VARCHAR(MAX),
@IsNullCols VARCHAR(MAX),
@query VARCHAR(MAX)
SELECT
@cols = STUFF((
SELECT DISTINCT ', [' + tocity + ']'
FROM (SELECT tocity FROM DistanceTable
union
SELECT fromcity FROM DistanceTable)a
FOR XML PATH('')
), 1, 2, '');
print @cols;
SELECT
@IsNullCols = STUFF((
SELECT DISTINCT ', ['+tocity+']=IsNull([' + tocity + '],0)'
FROM (SELECT tocity FROM DistanceTable
union
SELECT fromcity FROM DistanceTable)a
FOR XML PATH('')
), 1, 2, '');
print @IsNullCols;
set @query = 'SELECT fromcity
,'+ @IsNullCols +'
FROM (
SELECT fromcity ,tocity,Dist
FROM DistanceTable
union
SELECT tocity,fromcity ,Dist
FROM DistanceTable
) AS ET
PIVOT
(max(dist) FOR tocity IN ('[email protected]+')
) AS PT '
exec(@query)