Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Unir dos SELECT en una sola consulta (https://www.clubdelphi.com/foros/showthread.php?t=84015)

adrall 28-08-2013 10:47:10

Unir dos SELECT en una sola consulta
 
Hola a todos, a ver si me podeis ayudar con esta consulta que en principio parece fácil pero con mi nivel de MySQL no consigo hallarle solución:

Quiero unir estos dos SELECT de "ventas por meses" en una sola consulta, relacionandolas por el campo mes.

Código SQL [-]
SELECT sum(importe) AS ventas_total, year(fecha)*100+month(fecha) AS x_mes FROM ventas GROUP BY year(fecha),month(fecha)

Código SQL [-]
SELECT sum(importe) AS ventas, year(fecha)*100+month(fecha) AS x_mes FROM ventas WHERE vendedor=1 GROUP BY year(fecha),month(fecha)

Es decir, en un mismo TQuery necesito que aparezca la columna de ventas totales por meses y las ventas de un vendedor concreto.

Muchas gracias

ElDioni 28-08-2013 13:40:50

Hola,

yo creo que tendrás que hacer dos consultas distintas y mostrarlas juntas en algún componente, no se puede agrupar por dos cosas distintas dentro de la misma consulta.

Saludos.

adrall 28-08-2013 14:03:33

Si te refieres al GROUP BY tambien lo puedo poner así.

Código SQL [-]
SELECT sum(importe) AS ventas_total, year(fecha)*100+month(fecha) AS x_mes FROM ventas GROUP BY x_mes

fjcg02 28-08-2013 16:03:49

Prueba con esto, en principio debería funcionar.

Código SQL [-]
SELECT
sum(importe) AS ventas_total, , 
sum(case when vendedor=1
             then importe
             else
                  0
      end ) AS VENDEDOR1,
year(fecha)*100+month(fecha) AS x_mes
FROM ventas 
GROUP BY year(fecha),month(fecha)

Nos dices cómo te ha ido. Si te va bien, nos explicas porqué.

Un saludo

adrall 28-08-2013 18:08:52

Funciona perfectamente, es una solución genial, desconocia totalmente el uso de condicionales en las sentencias SELECT.

Muchisimas gracias.

fjcg02 28-08-2013 18:46:51

Me alegro de que te funcione!!

Jugando con los case when se pueden hacer cosas muy chulas, como por ejemplo hacer querys que te devuelvan los meses en columnas, etc.

Lo bueno es que es el propio motor el que te devuelve la información y se puede mostrar en un dbgrid.

Un saludo

TiammatMX 28-08-2013 19:15:16

Y usando UNION ALL puedes lograr el mismo efecto..., consulta tu manual de SQL.

ElDioni 29-08-2013 08:56:34

Cita:

Empezado por ElDioni (Mensaje 466154)
Hola,

yo creo que tendrás que hacer dos consultas distintas y mostrarlas juntas en algún componente, no se puede agrupar por dos cosas distintas dentro de la misma consulta.

Saludos.


:rolleyes:

adrall 29-08-2013 12:01:02

[fjcg02]

He probado de hacer la consulta como decias, columnando por meses y agrupando por años y funciona a la perfección,

Cada dia me sorprende más la potencia de SQL.

Gracias por todo.

fjcg02 29-08-2013 15:43:02

De nada, a mandar...

Hoy voy a echar la siesta contento... ;):D

Un saludo


La franja horaria es GMT +2. Ahora son las 04:50:59.

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