Intenta así:
Código SQL:
Ver original..
..
GO
;
WITH T AS
(SELECT ROW_NUMBER() OVER(Partition BY nombre ORDER BY id) Nm,
*
FROM TABLE1)
SELECT nombre,
IsNull(MAX(CASE WHEN Nm=1 THEN CAST(Valor AS VARCHAR) END),'-'),
IsNull(MAX(CASE WHEN Nm=2 THEN CAST(Valor AS VARCHAR) END),'-'),
IsNull(MAX(CASE WHEN Nm=3 THEN CAST(Valor AS VARCHAR) END),'-')
FROM T
GROUP BY nombre;
El With del CTE obliga un semicolon antes, para evitar ambeguedades con el With.
Supongo que antes el Go hay otra instrucción, de lo contrario- el Go es redundante.