Получение ошибки с Dynami c Pivot возле 'as' - PullRequest
0 голосов
/ 11 марта 2020

Здравствуйте, мне нужна помощь. Я не знаю, где ошибка

Сообщение 156, Уровень 15, Состояние 1, Строка 15 Неверный синтаксис рядом с ключевым словом «as».

Pivot

DECLARE @columns nvarchar(max),@columns2 nvarchar(max),
        @sql nvarchar(max)      
SELECT @columns = (
     SELECT DISTINCT ','+QUOTENAME(Pregunta)
    FROM Preguntas WHERE IdEncuesta=69
    FOR XML PATH('')
)
SELECT @sql = N'
SELECT  Respuesta,'+STUFF(@columns,1,1,'')+'
(Select t.Pregunta as Pregunta,
--Error
    CASE WHEN r.Respuesta IS NULL THEN ''-''  ELSE r.Respuesta END AS Respuesta,
    CASE WHEN op.IdOpcionPregunta IS NULL THEN ''-''  ELSE z.NombreNivel END AS Respuesta,
    CASE WHEN r.ValorRespMultiple IS NULL THEN  ''-''  ELSE m.NombreOpcion END AS Respuesta,
    CASE WHEN r.IdOpcionUnicaPregunta IS NULL THEN  ''-'' ELSE u.NombreOpcion END AS Respuesta
    FROM Preguntas t
    INNER JOIN Participante p ON p.IdEncuesta = t.IdEncuesta
    inner join Respuestas r on r.IdPregunta = t.IdPregunta
    left join OpcionPregunta op on op.IdOpcionPregunta= r.IdOpcionPregunta
    left join OpcionPregunta m on m.IdOpcionPregunta= r.ValorRespMultiple
    left join OpcionPregunta u on u.IdOpcionPregunta= r.IdOpcionUnicaPregunta
    Left join OpcionesEscala z on z.IdOpcionEscala = r.IdOpcionPregunta
    WHERE t.IdEncuesta=69 AND p.EstadoRespuesta =1) as t
    PIVOT (
        MAX(Respuesta) FOR Pregunta IN ('+STUFF(@columns,1,1,'')+')
    ) as pvt'
    EXEC sp_executesql @sql 

1 Ответ

1 голос
/ 11 марта 2020

Вам не хватает FROM изменить список столбцов (3-я строка):

SELECT @sql = N'
SELECT  Respuesta,'+STUFF(@columns,1,1,'')+'
FROM (Select t.Pregunta as Pregunta,
--Error
    CASE WHEN r.Respuesta IS NULL THEN ''-''  ELSE r.Respuesta END AS Respuesta,
    CASE WHEN op.IdOpcionPregunta IS NULL THEN ''-''  ELSE z.NombreNivel END AS Respuesta,
    CASE WHEN r.ValorRespMultiple IS NULL THEN  ''-''  ELSE m.NombreOpcion END AS Respuesta,
    CASE WHEN r.IdOpcionUnicaPregunta IS NULL THEN  ''-'' ELSE u.NombreOpcion END AS Respuesta
    FROM Preguntas t
    INNER JOIN Participante p ON p.IdEncuesta = t.IdEncuesta
    inner join Respuestas r on r.IdPregunta = t.IdPregunta
    left join OpcionPregunta op on op.IdOpcionPregunta= r.IdOpcionPregunta
    left join OpcionPregunta m on m.IdOpcionPregunta= r.ValorRespMultiple
    left join OpcionPregunta u on u.IdOpcionPregunta= r.IdOpcionUnicaPregunta
    Left join OpcionesEscala z on z.IdOpcionEscala = r.IdOpcionPregunta
    WHERE t.IdEncuesta=69 AND p.EstadoRespuesta =1) as t
    PIVOT (
        MAX(Respuesta) FOR Pregunta IN ('+STUFF(@columns,1,1,'')+')
    ) as pvt'
    EXEC sp_executesql @sql 
...