Devolver un solo conjunto de resultados

12/06/2006 - 19:40 por Raipon | Informe spam
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

#1 Ele
13/06/2006 - 01:06 | Informe spam
Hola el 08 de junio 2006 marco anuncio el post consulta de referencias
cruzadas quiza es es lo que estas buscando por lo que entiendo a tu problema

"Raipon" escribió en el mensaje
news:
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.

Preguntas similares