Como hacer este Select ???

15/01/2010 - 16:43 por Samuel SMH | Informe spam
Tengo lo siguiente en SQL2000 , necesito hacer algo asi como un PIVOT.

recibo cuota monto
100 1 250
101 1 150
102 2 350
103 3 50
104 2 30

Deseo obtener:

descripcion 1 2 3
Recibo 250 350 50
Recibo 150 30

Solo puedo llegar a esto; pero no es lo correcto.. que me falta??

descripcion 1 2 3
Recibo 400 0 0
Recibo 0 380 0
Recibo 0 0 50

Gracias por la ayuda... ya estoy mareado probando tanto y no logro.

Preguntas similare

Leer las respuestas

#1 Fredy Rivera
15/01/2010 - 17:06 | Informe spam
Prueba con este query, asumienod que la tabla se llama prueba:

SELECT recibo, [1] as cuota1, [2] as cuota2, [3] as cuota3
FROM
(SELECT *
FROM prueba) p
PIVOT
(
sum (monto)
FOR cuota IN
([1],[2],[3])
) AS pvt
ORDER BY recibo



"Samuel SMH" wrote:

Tengo lo siguiente en SQL2000 , necesito hacer algo asi como un PIVOT.

recibo cuota monto
100 1 250
101 1 150
102 2 350
103 3 50
104 2 30

Deseo obtener:

descripcion 1 2 3
Recibo 250 350 50
Recibo 150 30

Solo puedo llegar a esto; pero no es lo correcto.. que me falta??

descripcion 1 2 3
Recibo 400 0 0
Recibo 0 380 0
Recibo 0 0 50

Gracias por la ayuda... ya estoy mareado probando tanto y no logro.

Respuesta Responder a este mensaje
#2 Samuel SMH
15/01/2010 - 17:24 | Informe spam
Hola Fredy... la función PIVOT no existe en SQL2000.

Otra forma hacerlo con LISTAS o algo asi...

Gracias.

"Fredy Rivera" wrote:

Prueba con este query, asumienod que la tabla se llama prueba:

SELECT recibo, [1] as cuota1, [2] as cuota2, [3] as cuota3
FROM
(SELECT *
FROM prueba) p
PIVOT
(
sum (monto)
FOR cuota IN
([1],[2],[3])
) AS pvt
ORDER BY recibo



"Samuel SMH" wrote:

> Tengo lo siguiente en SQL2000 , necesito hacer algo asi como un PIVOT.
>
> recibo cuota monto
> 100 1 250
> 101 1 150
> 102 2 350
> 103 3 50
> 104 2 30
>
> Deseo obtener:
>
> descripcion 1 2 3
> Recibo 250 350 50
> Recibo 150 30
>
> Solo puedo llegar a esto; pero no es lo correcto.. que me falta??
>
> descripcion 1 2 3
> Recibo 400 0 0
> Recibo 0 380 0
> Recibo 0 0 50
>
> Gracias por la ayuda... ya estoy mareado probando tanto y no logro.
>
Respuesta Responder a este mensaje
#3 Alejandro Mesa
15/01/2010 - 17:34 | Informe spam
Samuel,

Pudieras describir lo que deseas?

Al parecer estas agrupando por valor de [cuota], pero a la misma vez estas
creando tantas columnas como cuotas existen. cual es la logica de agrupacion
en el resultado que deseas?

Cual es el role que juega la columna [recibo] en todo esto?


AMB


"Samuel SMH" wrote:

Tengo lo siguiente en SQL2000 , necesito hacer algo asi como un PIVOT.

recibo cuota monto
100 1 250
101 1 150
102 2 350
103 3 50
104 2 30

Deseo obtener:

descripcion 1 2 3
Recibo 250 350 50
Recibo 150 30

Solo puedo llegar a esto; pero no es lo correcto.. que me falta??

descripcion 1 2 3
Recibo 400 0 0
Recibo 0 380 0
Recibo 0 0 50

Gracias por la ayuda... ya estoy mareado probando tanto y no logro.

Respuesta Responder a este mensaje
#4 Alejandro Mesa
15/01/2010 - 17:40 | Informe spam
Ve si esto te es de ayuda.

DECLARE @t TABLE (
recibo int,
cuota int,
monto int);

INSERT INTO @t VALUES(100, 1, 250);
INSERT INTO @t VALUES(101, 1, 150);
INSERT INTO @t VALUES(102, 2, 350);
INSERT INTO @t VALUES(103, 3, 50);
INSERT INTO @t VALUES(104, 2, 30);

SELECT
'recibo' AS descripcion,
SUM(CASE WHEN cuota = 1 THEN monto END) AS [1],
SUM(CASE WHEN cuota = 2 THEN monto END) AS [2],
SUM(CASE WHEN cuota = 3 THEN monto END) AS [3]
FROM
(
SELECT
recibo,
cuota,
monto,
(
SELECT COUNT(*)
FROM @t AS B
WHERE B.cuota = A.cuota AND B.recibo <= A.recibo
) as rn
FROM
@t AS A
) AS C
GROUP BY
rn;
GO


AMB


"Alejandro Mesa" wrote:

Samuel,

Pudieras describir lo que deseas?

Al parecer estas agrupando por valor de [cuota], pero a la misma vez estas
creando tantas columnas como cuotas existen. cual es la logica de agrupacion
en el resultado que deseas?

Cual es el role que juega la columna [recibo] en todo esto?


AMB


"Samuel SMH" wrote:

> Tengo lo siguiente en SQL2000 , necesito hacer algo asi como un PIVOT.
>
> recibo cuota monto
> 100 1 250
> 101 1 150
> 102 2 350
> 103 3 50
> 104 2 30
>
> Deseo obtener:
>
> descripcion 1 2 3
> Recibo 250 350 50
> Recibo 150 30
>
> Solo puedo llegar a esto; pero no es lo correcto.. que me falta??
>
> descripcion 1 2 3
> Recibo 400 0 0
> Recibo 0 380 0
> Recibo 0 0 50
>
> Gracias por la ayuda... ya estoy mareado probando tanto y no logro.
>
Respuesta Responder a este mensaje
#5 Samuel SMH
15/01/2010 - 17:51 | Informe spam
Hola Alejandro;
Lo que sucede estoy revisando un reporte que ah sido generado en un sistema
todo programado dentro de la aplicacion y lo que deseo es pasarlo a SP para
mejorar la velocidad de respuesta.

Entiendo que si el alumno hizo un pago al banco para la cuota1 debe
generarse un registro con su monto y los otros montos de cuotas2,3, en 0 .
Si el alumno hizo un pago de la cuota 2 debe poner el monto en la cuota2 (es
decir reemplazar el cero sin agregar registro nuevo).
Si el alumno hace un otro pago de la cuota1 no reemplazar el monto ni
sumarlo; sino generar otro registro con su monto y asi sucesivamente igual
para las otras cuotas 2 y 3.

Es algo engorroso pero asi esta funcionando este reporte y el usuario lo
quiere asi de igual.

Ojala se pueda hacer con un select sino tendre que hacerlo con Bucles While
y deseo evitar esto porque tendria que crear una tabla temporal o cursores y
creo que seria igual de lento en el futuro.
Lo que sugiero es hacerlo mediante TSQL, o con Listas nose si se pueda.

Utilizo SQL2000

Saludos.

"Alejandro Mesa" wrote:

Samuel,

Pudieras describir lo que deseas?

Al parecer estas agrupando por valor de [cuota], pero a la misma vez estas
creando tantas columnas como cuotas existen. cual es la logica de agrupacion
en el resultado que deseas?

Cual es el role que juega la columna [recibo] en todo esto?


AMB


"Samuel SMH" wrote:

> Tengo lo siguiente en SQL2000 , necesito hacer algo asi como un PIVOT.
>
> recibo cuota monto
> 100 1 250
> 101 1 150
> 102 2 350
> 103 3 50
> 104 2 30
>
> Deseo obtener:
>
> descripcion 1 2 3
> Recibo 250 350 50
> Recibo 150 30
>
> Solo puedo llegar a esto; pero no es lo correcto.. que me falta??
>
> descripcion 1 2 3
> Recibo 400 0 0
> Recibo 0 380 0
> Recibo 0 0 50
>
> Gracias por la ayuda... ya estoy mareado probando tanto y no logro.
>
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida