首页 > 解决方案 > 在“as”附近出现动态枢轴错误

问题描述

你好我需要帮助我不知道错误在哪里

消息 156,级别 15,状态 1,第 15 行 关键字“as”附近的语法不正确。

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 

标签: sql-serverpivotcase

解决方案


您缺少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 

推荐阅读