Ver Mensaje Individual
  #1 (permalink)  
Antiguo 30/06/2014, 10:06
LOD_Fredy
 
Fecha de Ingreso: abril-2009
Mensajes: 341
Antigüedad: 15 años, 6 meses
Puntos: 3
Ignorar columnas en group by

Hola a todos.

Hoy me he topado con el siguiente problema (que en mysql no existe):

Tengo la siguiente consulta:

Código MySQL:
Ver original
  1. SELECT cl.cl_nombre as 'Customer',cl.cl_custnumber AS 'Cust Number', mo.mo_nombre AS 'Currency',CONVERT(varchar, CAST(ops.om_faccant AS money), 1) as 'Maximum loan', CONVERT(varchar, CAST(dbo.total_prestamo(ops.om_id) AS money), 1) as 'Cumulative loan' ,CONVERT(varchar, CAST(dbo.AVAILABLE_AMOUNT(ops.om_id , ops.om_faccant)AS money), 1) as 'Available Balance' FROM  
  2.                                          opsmemo ops inner join clientes cl on cl.cl_id = ops.cl_id inner join monedas mo on mo.mo_id = ops.mo_id inner join prestamos  pr on pr.om_id = ops.om_id   where (dbo.total_prestamo(ops.om_id)+(ops.om_faccant*.1)) >= ops.om_faccant group by cl.cl_nombre ,cl.cl_custnumber,ops.om_faccant,pr.om_id , ops.om_id,mo.mo_nombre

Esta consulta devuelve erróneamente 1 registro por cliente, lo cual está mal pues debería devolver un registro por opsmemo (un cliente puede tener varios opsmemo), sin embargo la hice así para que funcionara.

Estuve buscando que hacer para solucionarlo y no entiendo la solución (ni siquiera para dos tablas), entonces me atrevo esta vez a pedir la solución a esta consulta y que me expliquen el funcionamiento para poder hacerlo en futuros casos (y así no volver a pedirles que me resuelvan la vida).

Gracias de antemano y disculpen que les pida la solución directa pero enserio, no entiendo la solución.

PD: les dejo el código solución que encontre (para dos tablas)

Código MySQL:
Ver original
  1. SELECT b.ungroupedColumn,  -- your ungrouped columns
  2.        a.* -- your grouped columns
  3. FROM (SELECT Column1, Column2, sum(Column3)
  4.       FROM mytable
  5.       GROUP BY Column1, Column2) a
  6. INNER JOIN mytable b ON a.Column1 = b.Column1