在SSRS中使用t sql数据透视表时出错

时间:2011-02-07 19:57:24

标签: sql reporting-services

我有一个在SQL SERVER上运行完美的SQL代码,它在SSRS中运行时运行正常,但是当我用变量替换常量值时,它不会返回任何值。

这是我正在使用的代码。

------LISTADO DE calificaciones de ESTUDIANTES
DECLARE @PivotColumnHeaders VARCHAR(MAX)
SELECT @PivotColumnHeaders = 
  COALESCE(
    @PivotColumnHeaders + ',[' + cast(Codigo as varchar) + ']',
    '[' + cast(Codigo as varchar)+ ']'
  )
FROM RubroCalificaciones
inner join  RubrosMetodosEvaluacion on RubroCalificaciones.IdRubro = RubrosMetodosEvaluacion.IdRubro
inner join MetodosEvaluacion on RubrosMetodosEvaluacion.IdMetodoEvaluacion = MetodosEvaluacion.IdMetodoEvaluacion
inner join AsignacionesMetodosEvaluacion on AsignacionesMetodosEvaluacion.IdMetodoEvaluacion = MetodosEvaluacion.IdMetodoEvaluacion
where AsignacionesMetodosEvaluacion.IdGrupo = @IdGrupo--293856

DECLARE @PivotTableSQL NVARCHAR(MAX)
SET @PivotTableSQL = N'
  SELECT *
  FROM (
select Estudiantes.Matricula, Personas.Nombres, Personas.Apellido1, personas.Apellido2,
RubroCalificaciones.Codigo, CalificacionesDetalle.PuntosAsignados
from Matriculas
inner join Personas on Matriculas.IdPersona = Personas.IdPersona
inner join Estudiantes on Matriculas.IdPersona = Estudiantes.IdPersona
inner join AsignacionesMetodosEvaluacion on Matriculas.IdGrupo = AsignacionesMetodosEvaluacion.IdGrupo
inner join MetodosEvaluacion on AsignacionesMetodosEvaluacion.IdMetodoEvaluacion = MetodosEvaluacion.IdMetodoEvaluacion
inner join RubrosMetodosEvaluacion on MetodosEvaluacion.IdMetodoEvaluacion = RubrosMetodosEvaluacion.IdMetodoEvaluacion
inner join RubroCalificaciones on RubroCalificaciones.IdRubro = RubrosMetodosEvaluacion.IdRubro
left outer join CalificacionesDetalle on CalificacionesDetalle.IdRubro = RubrosMetodosEvaluacion.IdRubro and
CalificacionesDetalle.IdMetodoEvaluacion = RubrosMetodosEvaluacion.IdMetodoEvaluacion
and CalificacionesDetalle.IdMatricula = Matriculas.IdMatricula
where Matriculas.IdGrupo = @IdGrupo--293856

  ) AS PivotData
  PIVOT (
    max(PuntosAsignados)
    FOR Codigo IN (
      ' + @PivotColumnHeaders + '
    )
  ) AS PivotTable
'

EXECUTE(@PivotTableSQL)

1 个答案:

答案 0 :(得分:0)

您需要将变量传递给动态SQL。另外,我重写了COALESCE,你只需要一次。

CREATE PROC NameThisProcedure
    @IdGrupo int
AS
------LISTADO DE calificaciones de ESTUDIANTES
DECLARE @PivotColumnHeaders VARCHAR(MAX)
SELECT @PivotColumnHeaders = 
  COALESCE(
    @PivotColumnHeaders + ',', '') + '[' + cast(Codigo as varchar)+ ']'
FROM RubroCalificaciones
inner join  RubrosMetodosEvaluacion on RubroCalificaciones.IdRubro = RubrosMetodosEvaluacion.IdRubro
inner join MetodosEvaluacion on RubrosMetodosEvaluacion.IdMetodoEvaluacion = MetodosEvaluacion.IdMetodoEvaluacion
inner join AsignacionesMetodosEvaluacion on AsignacionesMetodosEvaluacion.IdMetodoEvaluacion = MetodosEvaluacion.IdMetodoEvaluacion
where AsignacionesMetodosEvaluacion.IdGrupo = @IdGrupo--293856

DECLARE @PivotTableSQL NVARCHAR(MAX)
SET @PivotTableSQL = N'
  SELECT *
  FROM (
select Estudiantes.Matricula, Personas.Nombres, Personas.Apellido1, personas.Apellido2,
RubroCalificaciones.Codigo, CalificacionesDetalle.PuntosAsignados
from Matriculas
inner join Personas on Matriculas.IdPersona = Personas.IdPersona
inner join Estudiantes on Matriculas.IdPersona = Estudiantes.IdPersona
inner join AsignacionesMetodosEvaluacion on Matriculas.IdGrupo = AsignacionesMetodosEvaluacion.IdGrupo
inner join MetodosEvaluacion on AsignacionesMetodosEvaluacion.IdMetodoEvaluacion = MetodosEvaluacion.IdMetodoEvaluacion
inner join RubrosMetodosEvaluacion on MetodosEvaluacion.IdMetodoEvaluacion = RubrosMetodosEvaluacion.IdMetodoEvaluacion
inner join RubroCalificaciones on RubroCalificaciones.IdRubro = RubrosMetodosEvaluacion.IdRubro
left outer join CalificacionesDetalle on CalificacionesDetalle.IdRubro = RubrosMetodosEvaluacion.IdRubro and
CalificacionesDetalle.IdMetodoEvaluacion = RubrosMetodosEvaluacion.IdMetodoEvaluacion
and CalificacionesDetalle.IdMatricula = Matriculas.IdMatricula
where Matriculas.IdGrupo = @IdGrupo--293856

  ) AS PivotData
  PIVOT (
    max(PuntosAsignados)
    FOR Codigo IN (
      ' + @PivotColumnHeaders + '
    )
  ) AS PivotTable
'

EXECUTE sp_executeSQL @PivotTableSQL, N'@IdGrupo int', @IdGrupo
GO