【问题标题】:Getting error with Dynamic Pivot near 'as'在“as”附近出现动态枢轴错误
【发布时间】:2020-03-11 15:38:00
【问题描述】:

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

消息 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 

【问题讨论】:

  • 您好,欢迎来到 SO。我看到您正在尝试进行动态支点。调试动态 sql 的方法是在您尝试执行之前打印/选择创建的语句。
  • 我怀疑问题在于您的注入柱后面没有FROM,
  • @Larnu 我怀疑这只是问题的一部分。那个子查询的东西看起来也很可疑。
  • 我同意,@SeanLange。这只是一些我们不能用来复制问题(或运行)的代码的快速位置。

标签: sql-server pivot case


【解决方案1】:

你缺少FROMalter column list(3rd line):

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 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    • 2019-03-29
    • 2017-09-10
    • 1970-01-01
    相关资源
    最近更新 更多