Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Sentencia SQL super compleja (https://www.clubdelphi.com/foros/showthread.php?t=41047)

Sr.Scorpion 06-03-2007 17:48:06

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

ContraVeneno 06-03-2007 17:55:37

http://www.clubdelphi.com/foros/showthread.php?t=17253

movorack 06-03-2007 17:57:05

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

:o aunque se que no es Aaccess espero que te de una ayuda.

Casimiro Notevi 06-03-2007 20:11:30

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? :)

Sr.Scorpion 06-03-2007 20:34:56

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

Sr.Scorpion 06-03-2007 21:27:44

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

:o aunque se que no es Aaccess espero que te de una ayuda.


movorack 06-03-2007 21:39:20

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.

Sr.Scorpion 06-03-2007 21:48:15

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

movorack 06-03-2007 21:56:02

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.

escuarril 06-03-2007 22:06:44

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

Casimiro Notevi 06-03-2007 22:22:24

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.

vtdeleon 06-03-2007 23:26:01

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

ContraVeneno 07-03-2007 00:27:55

la idea del link que te proporcioné, era hacerte referencia a la opción Transform de access

movorack 07-03-2007 14:37:01

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.

fjcg02 08-03-2007 00:12:49

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


La franja horaria es GMT +2. Ahora son las 19:41:58.

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