Hola, tengo el siguiente procedimiento almacenado :
ALTER PROCEDURE [dbo].[sp_Dies_de_baixa]
As
SET NOCOUNT ON
DECLARE @Camps NVarChar (2000)
DECLARE @PIVOT NVarChar (1500)
DECLARE @Exercici int
DECLARE Baixes_Cursor CURSOR FOR
SELECT Year(Data) AS Exercici
FROM (DetallsHoraris INNER JOIN TítolHoraris ON
DetallsHoraris.IdTítolHorari = TítolHoraris.IdTítolHoraris) INNER JOIN
Empleats ON TítolHoraris.IdEmpleat = Empleats.IdEmpleat
Where Estat = 0
GROUP BY Year(Data)
OPEN Baixes_Cursor;
FETCH FROM Baixes_Cursor
Into @Exercici
Set @Camps = '['+ Convert(NVarchar, @Exercici) + '] As Exercici_' +
Convert(NVarchar, @Exercici)
Set @Pivot = '['+ Convert(NVarchar, @Exercici) + ']'
FETCH NEXT FROM Baixes_Cursor;
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH FROM Baixes_Cursor
Into @Exercici
Set @Camps = @Camps + ', ['+ Convert(NVarchar, @Exercici) + '] As
Exercici_' + Convert(NVarchar, @Exercici)
Set @Pivot = @Pivot + ', ['+ Convert(NVarchar, @Exercici) + ']'
END;
CLOSE Baixes_Cursor;
DEALLOCATE Baixes_Cursor;
Execute (N'SELECT Nom, ' + @Camps +
' FROM
(SELECT Nom, Year(Data) AS Exercici
FROM (DetallsHoraris INNER JOIN TítolHoraris ON
DetallsHoraris.IdTítolHorari = TítolHoraris.IdTítolHoraris) INNER JOIN
Empleats ON TítolHoraris.IdEmpleat = Empleats.IdEmpleat Where Estat = 0) p
PIVOT
(
COUNT (Exercici)
FOR Exercici IN
( ' + @Pivot + ' )
) AS pvt
ORDER BY Nom'
)
El objetivo es obtener, de forma análoga a las consultas de referencias
cruzadas de Access un listado con un número variable de columnas, en este
caso, una por año. El problema, y perdón si es algo trivial, es que este
procedimiento me devuelve dos conjuntos de resultados : El primero : Exercici
= Null, y el segundo son los resultados de Execute. Y yo necesito que sólo me
devuelva los resultados del Execute. ¿ Cómo puedo hacerlo ?
Gracias por la atención.
Leer las respuestas