PDA

Ver la Versión Completa : Un Campo/ Dos Columnas


JROMAN
08-09-2003, 16:53:05
Tengo Una tabla en MySQL, que contiene fecha, importe, tipo venta(tienda/almacén).

Quería hacer una Consulta, que me diera la fecha, las ventas almacén, y las ventas en tienda. Es decir según el tipo de venta que me las ponga en una columna o en otra.

Lo he intentado con SELECT xxx WHERE, con IIF(xxx etc etc), pero siempre me da error de syntaxis.

Me podéis Ayudar?

Gracias

haron
08-09-2003, 19:09:34
no se si lo he entendido bien.

necesitas tres columnas: fecha, venta_almacen y venta_tienda.
si el tipo de venta es 'almacen' que te coloque el resultado en 'venta_almacen', en caso contrario lo coloque en 'venta_tienda'.

no he usado MySQL, pero en Interbase lo haria asi:


select
fecha,
importe as venta_almacen,
0 as venta_tienda
from ventas
where tipo_venta='almacen'

union all

select
fecha,
0 as venta_almacen,
importe as venta_tienda
from ventas
where tipo_venta='tienda'

order by fecha


puedes agrupar por la fecha, si quieres que salga un acumulado del importe, etc...

si este tipo de sentencias no lo soporta MySQL (que me extraña) puedes hechar mano tambien de los campos calculados en Delphi.

JROMAN
08-09-2003, 20:46:05
Gracias por tu respuesta Haron, pero....

Ya lo había probado, y funciona al 50%, me explico:

La tabla, la añade al final, no la mezcla,

fecha venta_almacen venta_tienda
01/01/2003 10,20 0
02/01/2003 30,10 0
03/01/2003 18,20 0
01/01/2003 0 11
02/01/2003 0 12
03/10/2003 0 23

Y como problema añadido, las venta_tienda, no tiene decimales ?¿

¿se te ocurre alguna otra solucion?

javiermorales
09-09-2003, 13:12:10
Hola, por lo que comentas de hacerlo utilizando el iif, que no se si lo soporta MySql, sería:

Select fecha_venta, sum(iif(tipo_venta='almacen',importe,0)) as tot_almacen, sum(iif(tipo_venta='tienda',importe,0)) as tot_tienda
from ventas
group by fecha_venta

Espero que te sirva. Un saludo.

JROMAN
10-09-2003, 00:37:58
Gracias Javiermorales, pero el problema continua, empiezo a estar desesperado, tanto si utilizo

sum(iif(tipo_venta='almacen',importe,0)) as tot_almacen

o utilizo

iif(tipo_venta='almacen',sum(importe),0) as tot_almacen

el resultado es el mismo, "error de sintaxis"....

Empiezo a creer que la única solución es crear una tabla local temporal donde volcar los resultados.... solución que no me gusta nada.

Un saludo.

__cadetill
10-09-2003, 02:23:23
hola

en interbase tambien puedes hacer algo asi


select codigo,
(select sum(pvp) from articulos where codigo >= '0040000'),
(select sum(pvp) from articulos where codigo < '0040000')
from articulos


o sea, una select en la select

a ver si asi te sirve

javiermorales
10-09-2003, 09:45:06
Hola, utilizando lo indicado por Cadetill, quedaría como:

Select fecha_venta,
(select sum(importe) from ventas where tipo_venta='almacen'),
(select sum(importe) from ventas where tipo_venta='tienda')
from ventas

o si lo permitiese, yo intentaría unir las selecciones:

Select A.fecha_venta,
(select sum(B.importe) from ventas B where B.tipo_venta='almacen' and A.fecha_venta=B.fecha_venta),
(select sum(C.importe) from ventas C where C.tipo_venta='tienda' and A.fecha_venta=C.fecha_venta)
from ventas A


No lo he probado, ya que no tengo MySql. Un saludo.

JROMAN
10-09-2003, 11:14:58
Gracias a todos por vuestra inestimable ayuda, pero.... "cuando todo falla, es el momento de leerse el manual":D

En la Pág. de MySQl, esta el manual (muy buen manual, por si alguien le interesa) y después de releer y releer, he visto que en MySQL, el "iif" se escribe como un simple "if", con lo que una de las posibles soluciones seria:

sum(if(tipo_venta='almacen',importe,0)) as tot_almacen

A grandes problemas, soluciones muy tontas.

Gracias a todos y Un saludo.