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

consulta sql un poco complicada

Estas en el tema de consulta sql un poco complicada en el foro de Bases de Datos General en Foros del Web. Hola tengo una duda para hacer una consulta sql tengo una tabla del tipo grupo de cliente | precio | id_producto ------------------------------------------------- 1-------------- 2,5---------256 1-------------- ...
  #1 (permalink)  
Antiguo 30/05/2008, 06:26
 
Fecha de Ingreso: septiembre-2005
Mensajes: 37
Antigüedad: 18 años, 7 meses
Puntos: 0
De acuerdo consulta sql un poco complicada

Hola tengo una duda para hacer una consulta sql

tengo una tabla del tipo

grupo de cliente | precio | id_producto
-------------------------------------------------
1-------------- 2,5---------256
1-------------- 3,5---------257
1-------------- 2,4---------243
2-------------- 2,4---------256
2-------------- 3,4---------257
3-------------- 2,3---------256
3-------------- 2,3---------243


yo lo que querría obtener es un informe del tipo

id_producto | preciogrupo1 | preciogrupo2 | preciogrupo3
------------------------------------------------------------------------
256------------2,5------------2,4----------2,3
257------------3,5------------3,4----------
243------------2,4------------ - ------------2,3

puedo usar tanto sql, como php, los grupos de precios no son infinitos, son pocos y no varían, es decir no hace falta que aunque se añada otro grupo añada automáticamente una nueva columna.
¿SE PUEDE HACER?
Muchas gracias por la ayuda!!!!

Última edición por kubic; 30/05/2008 a las 09:25
  #2 (permalink)  
Antiguo 31/05/2008, 09:05
 
Fecha de Ingreso: mayo-2008
Mensajes: 64
Antigüedad: 16 años
Puntos: 0
Respuesta: consulta sql un poco complicada

haz en la tabla de la BD, los cmpos de los precios de grupo y carril... no?
  #3 (permalink)  
Antiguo 01/06/2008, 16:54
 
Fecha de Ingreso: septiembre-2005
Mensajes: 37
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: consulta sql un poco complicada

Gracias DjCasius, pero no tengo esa posibilidad, es una tabla basada en un sistema oscommerce, que no puedo modificar.
La tabla tiene ese diseño y es prácticamente imposible de modificar.

Lo que quiero es sacar un informe como expliqué, es decir una tabla de tarifas.

Yo creo es posible, para un sólo tipo de tarifa ya la tengo hecha pero no se si tendría que hacer alguna consulta de unión o no se...
  #4 (permalink)  
Antiguo 02/06/2008, 02:37
 
Fecha de Ingreso: marzo-2008
Ubicación: Euskadi
Mensajes: 64
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: consulta sql un poco complicada

Hola kubic,

he hecho unas pruebas y creo que esto te debería funcionar, suponiendo siempre que la combinación (id_producto, grupo_de_cliente) es única (si no lo fuera obtendrías la suma de los precios):

Código:
select id_producto, sum(preciogrupo1) as preciogrupo1, sum(preciogrupo2) as preciogrupo2, sum(preciogrupo3) as preciogrupo3
from(
select id_producto , decode(grupo_de_cliente, 1, sum(precio), null) as preciogrupo1, 
	   	 decode(grupo_de_cliente, 2, sum(precio), null) as preciogrupo2,
		 decode(grupo_de_cliente, 3, sum(precio), null) as preciogrupo3
from tabla
group by id_producto, grupo_de_cliente
)
group by id_producto
order by id_producto
Espero que te valga, nos cuentas, vale?

Un saludo
  #5 (permalink)  
Antiguo 03/06/2008, 04:59
 
Fecha de Ingreso: septiembre-2005
Mensajes: 37
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: consulta sql un poco complicada

Gracias MutenRo porque soy consciente que te llevó un tiempo probar la solución

bufff odio que me lo den todo masticado pero es que esta consulta se me queda grande, no puedo con ella...

la tengo de momento tal que así:
Código:
select products_id, sum(preciogrupo1) as preciogrupo1, sum(preciogrupo2) as preciogrupo2, sum(preciogrupo3) as preciogrupo3
from(
select products_id, decode(customers_group_id, 1, sum(customers_group_price), null) as preciogrupo1,
					decode(customers_group_id, 2, sum(customers_group_price), null) as preciogrupo2,
					decode(customers_group_id, 3, sum(customers_group_price), null) as preciogrupo3,
from products_groups
group by products_id, customers_group_id
)
group by products_id
order by products_id
pero tengo dos problemas
1) uso mysql, y creo la función decode no existe, con lo cual... error mysql, creo que hay que usar un case, sigo investigando a ver si me aclaro con eso
2) la parte de
Código:
sum(preciogrupo1) as preciogrupo1, sum(preciogrupo2) as preciogrupo2, sum(preciogrupo3) as preciogrupo3
la verdad que como no llego a entender el funcionamiento de la consulta, no se si será una tontería lo que pregunto. Yo no tengo ningún campo que se llame preciogrupo1 (ni 2 ni 3), imagino que será un alias, pero no se...
la relación de campos que uso es:
customers_group_id --> grupo de cliente toma valores tipo 1,2,3.. tengo hasta 4
customers_group_price--> precio (el precio que tiene ese grupo de cliente en ese artículo)
products_id --> id del producto toma valores tipo 245,214,1356,...

No se si lo de poner sum(preciogrupo1)... será correcto o es un alias
  #6 (permalink)  
Antiguo 03/06/2008, 10:44
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: consulta sql un poco complicada

En MySQL la consulta de MutenRo podría ser algo así (la he probado y funciona: enhorabuena, MutenRo):

SELECT t2.id_producto, sum( preciogrupo1 ) AS preciogrupo1, sum( preciogrupo2 ) AS preciogrupo2, sum( preciogrupo3 ) AS preciogrupo3
FROM (

SELECT id_producto, if( grupo_de_cliente =1, sum( precio ) , NULL ) AS preciogrupo1, if( grupo_de_cliente =2, sum( precio ) , NULL ) AS preciogrupo2, if( grupo_de_cliente =3, sum( precio ) , NULL ) AS preciogrupo3
FROM kubic
GROUP BY id_producto, grupo_de_cliente
) AS t2
GROUP BY t2.id_producto
ORDER BY t2.id_producto

Observa que he cambiado el decode por if y que he añadido un alias t2 al select.

Última edición por jurena; 03/06/2008 a las 12:19
  #7 (permalink)  
Antiguo 04/06/2008, 03:45
 
Fecha de Ingreso: marzo-2008
Ubicación: Euskadi
Mensajes: 64
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: consulta sql un poco complicada

Hola,

yo había preparado la consulta con Oracle, con las modificaciones de jurena debería funcionarte bien en MySQL.

preciogrupo1, 2 y 3 no son más que alias, he utilizado los nombres de columna que vienen en el primer post.

La consulta en realidad no es complicada, primero se agrupa por id_producto y grupo_de_cliente para obtener el precio en la columna adecuada (aunque los id_producto salgan repetidos) y luego mediante otra consulta se agrupa por id_producto para 'fusionar' los distintos registros con el mismo id_producto en un solo registro.

Saludos.
  #8 (permalink)  
Antiguo 06/06/2008, 17:33
 
Fecha de Ingreso: septiembre-2005
Mensajes: 37
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: consulta sql un poco complicada

Sois la ostiaaaaa!!!!!!!!!!
acabo de dar botes de alegría en la silla al comprobar que me funciona !!!!!
De corazón gracias a todos.



Se que darme la solución os ha costado vuestro tiempo y de verdad eso es de valorar.
GRACIAS
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 08:11.