Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Rotación de Tablas extrañas

Estas en el tema de Rotación de Tablas extrañas en el foro de Bases de Datos General en Foros del Web. Si no me equivoco esta es una rotacion de tablas: El problema se ve basicamente en la foto. No se si es posible hacer lo ...
  #1 (permalink)  
Antiguo 10/03/2005, 13:19
 
Fecha de Ingreso: mayo-2004
Ubicación: Santiago, Chile
Mensajes: 191
Antigüedad: 20 años, 7 meses
Puntos: 1
Rotación de Tablas extrañas

Si no me equivoco esta es una rotacion de tablas:



El problema se ve basicamente en la foto.
No se si es posible hacer lo que sale ahi...

Necesito todo en una misma fila, no que por cada mes me vaya arrojando el resultado y lo demas lo rellene con 0.

Se puede?

Thanks!
  #2 (permalink)  
Antiguo 11/03/2005, 01:40
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 21 años, 5 meses
Puntos: 2
Realmente lo que tienes puesto es lo difícil, lo que pides es la forma normal de ponerlo. Yo no tengo idea de SqlServer (es lo que me parece esto), pero creo que este te puede servir:
Código:
select hd_glosa, he_anomes, right(he_anomes, 2) as mes, sum(he_monto)
from habdes_efect, hebedesc
where habedesc.hd_codigo = habdes_efect.he_codigo and
habdes_efect.he_codigo like '1%' and
he_anomes like '2002%'
group by hd_glosa, he_anomes
order by he_anomes
Un saludo.
__________________
Estoy contagiado de Generación-I
  #3 (permalink)  
Antiguo 11/03/2005, 18:09
 
Fecha de Ingreso: mayo-2004
Ubicación: Santiago, Chile
Mensajes: 191
Antigüedad: 20 años, 7 meses
Puntos: 1
Si, es SQL Server 7.

Gracias, pero con lo que pusiste me sale esto:



Como vez, no es exactamente lo que necesito
  #4 (permalink)  
Antiguo 12/03/2005, 09:12
 
Fecha de Ingreso: julio-2001
Mensajes: 80
Antigüedad: 23 años, 6 meses
Puntos: 1
Prueba esto

No estoy seguro de haber entendido lo que pides, en cualquier caso quizá sea esto a lo que te refieres...
Código:
select
	hd_glosa,
	left(he_anomes, 4) as anyo,
	sum(case right(he_anomes, 2) = '01' then he_monto else 0 end) as enero,
	sum(case right(he_anomes, 2) = '02' then he_monto else 0 end) as febrero,
	sum(case right(he_anomes, 2) = '03' then he_monto else 0 end) as marzo,
	sum(case right(he_anomes, 2) = '04' then he_monto else 0 end) as abril,
	sum(case right(he_anomes, 2) = '05' then he_monto else 0 end) as mayo,
	sum(case right(he_anomes, 2) = '06' then he_monto else 0 end) as junio,
	sum(case right(he_anomes, 2) = '07' then he_monto else 0 end) as julio,
	sum(case right(he_anomes, 2) = '08' then he_monto else 0 end) as agosto,
	sum(case right(he_anomes, 2) = '09' then he_monto else 0 end) as septiembre,
	sum(case right(he_anomes, 2) = '10' then he_monto else 0 end) as octubre,
	sum(case right(he_anomes, 2) = '11' then he_monto else 0 end) as noviembre,
	sum(case right(he_anomes, 2) = '12' then he_monto else 0 end) as diciembre
from habdes_efect, hebedesc
where
	habedesc.hd_codigo = habdes_efect.he_codigo and
	habdes_efect.he_codigo like '1%' and
	he_anomes like '2002%'
group by hd_glosa, left(he_anomes, 4)
order by he_anomes
__________________
Carlos Capote Pérez-Andreu

Última edición por engeneral; 12/03/2005 a las 09:18 Razón: Me equivoqué en el select...
  #5 (permalink)  
Antiguo 14/03/2005, 02:28
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 21 años, 5 meses
Puntos: 2
Acabo de releer lo que pides (la primara vez donde pone fila entendí columna) y no es posible hacerlo con sql salvo que uses procedimientos almacenados.
Un saludo.
__________________
Estoy contagiado de Generación-I
  #6 (permalink)  
Antiguo 14/03/2005, 08:38
 
Fecha de Ingreso: mayo-2004
Ubicación: Santiago, Chile
Mensajes: 191
Antigüedad: 20 años, 7 meses
Puntos: 1
Bueno, de echo estoy ocupado SP's ¿a que te refieres con eso?

mmm.... gracias por el codigo engeneral, pero me arroja exactamente el mismo resultado de arriba, claro por la excepcion de que escribiste todos los meses

a ver si con esto me entienden mejor



Por ejemplo, en la 1era columna, en donde dice "COLACION", necesito que todas las "colaciones" esten en una misma linea (fila) con su respectivo mes. Y asi lo mismo con "SUELDO", con "MOVILIZACION", etc, etc....

...o todavia no se entiende?
  #7 (permalink)  
Antiguo 15/03/2005, 14:16
 
Fecha de Ingreso: julio-2001
Mensajes: 80
Antigüedad: 23 años, 6 meses
Puntos: 1
La diferencia principal entre el código que tú proponías al principio y el que te propuse yo no es que yo haya puesto los doce meses, sino que agrupo por: left(he_anomes, 4) en lugar de por he_anomes.

(pruébalo)
__________________
Carlos Capote Pérez-Andreu
  #8 (permalink)  
Antiguo 15/03/2005, 16:54
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años, 8 meses
Puntos: 25
Tu error está en meter en el SELECT a "mes", pues lo tienes que meter en el GROUP BY y eso descuadra tu SELECT.

Quitalo del SELECT y del GROUP BY, verás como obtienes los bloques que quieres.
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #9 (permalink)  
Antiguo 16/03/2005, 22:20
 
Fecha de Ingreso: mayo-2004
Ubicación: Santiago, Chile
Mensajes: 191
Antigüedad: 20 años, 7 meses
Puntos: 1
POR FIN!, POR FIN!

Despues de haber creado 3 post gracias a todos lo que lo hicieron posible!



VERY SO VERY MUCH SO VERY THANKS!

Aki les dejo el codigo porsi alguien alguna vez tuviese este problema y pueda encontrar ojala alguna ayuda

Código:
SELECT hd_glosa,

    SUM(CASE RIGHT(he_anomes, 2) 
    WHEN 01 THEN he_monto ELSE 0 END) AS Enero,
 
    SUM(CASE RIGHT(he_anomes, 2) 
    WHEN 02 THEN he_monto ELSE 0 END) AS Febrero, 

    SUM(CASE RIGHT(he_anomes, 2) 
    WHEN 03 THEN he_monto ELSE 0 END) AS Marzo, 

    SUM(CASE RIGHT(he_anomes, 2) 
    WHEN 04 THEN he_monto ELSE 0 END) AS Abril, 

    SUM(CASE RIGHT(he_anomes, 2) 
    WHEN 05 THEN he_monto ELSE 0 END) AS Mayo, 

    SUM(CASE RIGHT(he_anomes, 2) 
    WHEN 06 THEN he_monto ELSE 0 END) AS Junio, 

    SUM(CASE RIGHT(he_anomes, 2) 
    WHEN 07 THEN he_monto ELSE 0 END) AS Julio, 

    SUM(CASE RIGHT(he_anomes, 2) 
    WHEN 08 THEN he_monto ELSE 0 END) AS Agosto, 

    SUM(CASE RIGHT(he_anomes, 2) 
    WHEN 09 THEN he_monto ELSE 0 END) AS Septiembre, 

    SUM(CASE RIGHT(he_anomes, 2) 
    WHEN 10 THEN he_monto ELSE 0 END) AS Octubre, 

    SUM(CASE RIGHT(he_anomes, 2) 
    WHEN 11 THEN he_monto ELSE 0 END) AS Noviembre, 

    SUM(CASE RIGHT(he_anomes, 2) 
    WHEN 12 THEN he_monto ELSE 0 END) AS Diciembre

FROM habdes_efect, habedesc

WHERE habedesc.hd_codigo = habdes_efect.he_codigo AND 
      habdes_efect.he_codigo LIKE '1%' AND 
      he_anomes LIKE '2002%'
 
GROUP BY hd_glosa, LEFT(he_anomes, 4)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:30.