Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-03-2007
Avatar de Sr.Scorpion
Sr.Scorpion Sr.Scorpion is offline
Miembro
 
Registrado: mar 2005
Posts: 92
Poder: 20
Sr.Scorpion Va por buen camino
Sentencia SQL super compleja

Hola:

Tengo una tabla donde tengo 3 campos Nombre, Costo y Fecha y quiero que se me sumen los Costos de un mismo nombre dentro de un mismo mes

Ejemplo:

Pepe 40 Enero
Carlo 20 Enero
Mario 0 Enero

Pepe 0 Febrero
Carlo 27 Febrero
Mario 15 Febrero

Pepe 10 Marzo
Carlo 22 Marzo
Mario 0 Marzo

Donde se complica esto..... que no quiero que el mes me salga al lado sino arriba Ejemplo:

Enero Febrero Marzo
Pepe 40 0 10
Carlo 20 27 15
Mario 0 15 0

Digame si es posible de hacer y si me pueden tirar una ayuda con eso

Uso Delphi 6 y Access

Saludos
__________________
La paciencia es un árbol de raíz amarga pero de frutos muy dulces.

Sr.Scorpion
Responder Con Cita
  #2  
Antiguo 06-03-2007
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
http://www.clubdelphi.com/foros/showthread.php?t=17253
__________________

Responder Con Cita
  #3  
Antiguo 06-03-2007
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
subquery

no se nadita de acces pero en PostgreSQL por ejemplo puedes hacer un subquery:

Código SQL [-]
Select
  idempleado,
  nombreempleado,
  (Select sum(valorventas) from ventasporempleado v2 where v2.idempleado = v1.idempleado and mes=1) as enero,
  (Select sum(valorventas) from ventasporempleado v2 where v2.idempleado = v1.idempleado and mes=2) as febrero,
  (Select sum(valorventas) from ventasporempleado v2 where v2.idempleado = v1.idempleado and mes=3) as marzo,
  sum(valorventas) as totaltrimestre
from ventasporempleado v1
group by idempleado, nombreempleado

El resultado será :

ID, EMPLEADO, ENERO, FEBRERO, MARZO, TOTALTRIMESTRE
123,JUAN,15,20,10,45
456,PEDRO,10,10,10,30
789,MATEO,5,6,9,20

aunque se que no es Aaccess espero que te de una ayuda.
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #4  
Antiguo 06-03-2007
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No quiero pecar de pedante, sólo a modo de broma:
Vale, esto ya te lo han contestado, ¿pero dónde está la pregunta sobre la sql supercompleja?
Responder Con Cita
  #5  
Antiguo 06-03-2007
Avatar de Sr.Scorpion
Sr.Scorpion Sr.Scorpion is offline
Miembro
 
Registrado: mar 2005
Posts: 92
Poder: 20
Sr.Scorpion Va por buen camino
Bueno gracias por responde... para mi es super compleja porque sin el Decode no se como lo iba a hacer... probare y despues posteare resultados

Saludos y Gracias
__________________
La paciencia es un árbol de raíz amarga pero de frutos muy dulces.

Sr.Scorpion
Responder Con Cita
  #6  
Antiguo 06-03-2007
Avatar de Sr.Scorpion
Sr.Scorpion Sr.Scorpion is offline
Miembro
 
Registrado: mar 2005
Posts: 92
Poder: 20
Sr.Scorpion Va por buen camino
Bueno debido a que el link no me funciono porque estoy usando Access.... probe con este... y no me fue muy bien ya que cuando suma la tabla suma los precios en dependencia del mes y no de los nombres y el mes

Código SQL [-]
SELECT Tabla1.Nombre, (Select sum(Precio) from Tabla1  where Fecha=1) AS enero
FROM Tabla1
GROUP BY Tabla1.Nombre;

Me sale lo siguiente:

Nombre___Enero
Carlos______30
Mario______30
Pepe_______30

Cuando me deberia salir
Nombre___Enero
Carlos______20
Mario_______0
Pepe_______10

Que me podria faltar ?

Cita:
Empezado por movorack
no se nadita de acces pero en PostgreSQL por ejemplo puedes hacer un subquery:

Código SQL [-]Select idempleado, nombreempleado, (Select sum(valorventas) from ventasporempleado v2 where v2.idempleado = v1.idempleado and mes=1) as enero, (Select sum(valorventas) from ventasporempleado v2 where v2.idempleado = v1.idempleado and mes=2) as febrero, (Select sum(valorventas) from ventasporempleado v2 where v2.idempleado = v1.idempleado and mes=3) as marzo, sum(valorventas) as totaltrimestre from ventasporempleado v1 group by idempleado, nombreempleado


El resultado será :

ID, EMPLEADO, ENERO, FEBRERO, MARZO, TOTALTRIMESTRE
123,JUAN,15,20,10,45
456,PEDRO,10,10,10,30
789,MATEO,5,6,9,20

aunque se que no es Aaccess espero que te de una ayuda.
__________________
La paciencia es un árbol de raíz amarga pero de frutos muy dulces.

Sr.Scorpion
Responder Con Cita
  #7  
Antiguo 06-03-2007
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
Hello...

Cita:
Empezado por Sr.Scorpion
Que me podria faltar ?
algo antes de continuar: Recuerdo que la primera vez que hice el tutorial "Hola Mundo" demore casi 5 minutos realizandolo. y eso en aquel entonces para mi era SUPERULTRAREQUETECOMPLEJO.

y con respecto a tu codigo...

Código SQL [-]
SELECT Tabla1.Nombre, (Select sum(Precio) from Tabla1  where Fecha=1) AS enero
FROM Tabla1
GROUP BY Tabla1.Nombre;

te cuento que la subquery que realizas solo llama al mes en la sentencia WHERE.Debes complementar ese where con el ID del empleado o el nombre (mejor el ID).

Código SQL [-]
Select
  t1.Nombre,
  (Select num(precio) from tabla1 t2 where t2.nombre = t1.nombre and t2.fecha=1) as ENERO
from tabla1 t1

por eso te puse un ejemplo completo... revisa el codigo que te puse anteriormente...

Bendiciones.
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #8  
Antiguo 06-03-2007
Avatar de Sr.Scorpion
Sr.Scorpion Sr.Scorpion is offline
Miembro
 
Registrado: mar 2005
Posts: 92
Poder: 20
Sr.Scorpion Va por buen camino
Al parecer tu tienes dos tablas pero en mi caso es solo una.....

Código SQL [-]
SELECT Tabla1.Nombre, (Select sum(Precio) from Tabla1  where Nombre = Nombre and Fecha=1) AS enero
FROM Tabla1
GROUP BY Tabla1.Nombre;

Aqui le agrego lo del nombre y la cosa sigue igual
__________________
La paciencia es un árbol de raíz amarga pero de frutos muy dulces.

Sr.Scorpion
Responder Con Cita
  #9  
Antiguo 06-03-2007
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
Es solo una tabla.

es solo que estoy declarando un alias para hacerlo más legible y más funcional.

Código SQL [-]
  Select
    t1.campo1,
    t1.campo2
  from tabla1 t1 -- Estoy declarando t1 como alias de tabla1

Así es más facil saber a que tabla me refiero en los subquery.

Código SQL [-]
    (select sum(campo2) from table1 T2 where T1.campo1 = T2.campo1) as campo3

ahora si ves... es solo una tabla.
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #10  
Antiguo 06-03-2007
Avatar de escuarril
escuarril escuarril is offline
Registrado
 
Registrado: ene 2007
Posts: 1
Poder: 0
escuarril Va por buen camino
Cool Mostrar Tabla en grilla vertical y horizontalmente

Sres...

Necesito de su ayuda, estamos intentando de mostrar, por Ejemplo:

una tabla que tiene dos campos NRO_TIENDA, FECHA de la siguiente forma

ojala en una grilla, el nro de tiendas hacia abajo (vertical) y la fecha hacia el lado (horizontal) como una matriz pero que dentro de la grilla se pueda editar sin que el dato pierda relacion entre el nro_tienda versus la fecha que le corresponde.

se podra hcer lo anterior con algun componente delphi 7, ojala Developer Express u otro que UDs sepan... Gracias.

Saludos Escuarril
Responder Con Cita
  #11  
Antiguo 06-03-2007
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Sr.Scorpion
Bueno gracias por responde... para mi es super compleja porque sin el Decode no se como lo iba a hacer... probare y despues posteare resultados Saludos y Gracias
Como ya dije antes, era sólo una broma, ya sé que cuando no se conoce algo, parece muy complejo, y cuando se conoce, de repente, parece sencillo.
Espero que puedas solucionar tu duda.
Responder Con Cita
  #12  
Antiguo 06-03-2007
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Creo que el enlace que te han puesto está la solución. Yo había dado un ejemplo similar con Case a como lo haría Access con Transform.

Puedes buscar en google por Trasnsform en access:
http://www.programacion.net/tutorial/sql/12/
http://www.wellho.net/forum/The-MySQ...ot-tables.html
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #13  
Antiguo 07-03-2007
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
la idea del link que te proporcioné, era hacerte referencia a la opción Transform de access
__________________

Responder Con Cita
  #14  
Antiguo 07-03-2007
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
A lo bien Scorpion...

lo que sucede es que estamos hablando de dos cosas distintas... deberias seguir los links que tedan.

como te dije antes... de access yo nadita.
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #15  
Antiguo 08-03-2007
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Lo que necesitas es una consulta de referencias cruzadas de access. El propio asistente de consultas te genera la sql, solo hace falta hacer unas pruebillas.

Código SQL [-]
TRANSFORM Sum(Tabla1.Coste) AS SumaDeCoste
SELECT Tabla1.Nombre
FROM Tabla1
GROUP BY Tabla1.Nombre
PIVOT Format([Fecha],"mmmm")  In ("enero","febrero","marzo",abril,mayo,junio,julio,agosto,septiembre,octubre,noviembre,diciembre)

Para Oracle se utiliza el Decode, para SQL Server se utiliza el CASE, para otros motores, ..... no lo sé pero seguro que hay alguna función que lo hace. Este tipo de de consultas se llaman transformadas.

Espero que te sirva.

Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Consulta SQL algo compleja subzero Firebird e Interbase 2 26-10-2006 18:49:01
Una super duda con FastReport bustio Impresión 6 09-12-2005 14:28:39
Super duda con Aplicacion MDI bustio Varios 0 07-12-2005 16:51:54
Variables Super Globales JANDREGUE Varios 1 18-03-2005 18:03:16
consulta SQL que me resulta compleja j2mg SQL 5 29-05-2003 22:50:13


La franja horaria es GMT +2. Ahora son las 09:18:26.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi