OT ordenamiento de un query

OT ordenamiento de un query

Postby horacio » Fri Dec 05, 2014 3:20 pm

Compañeros, tengo el siguiente query

Code: Select all  Expand view  RUN

cQuery    := "select codigo, r_social, deudacliente( 160, codigo ) as deuda, domicilio, telefono, localidad, c_p, e_mail, cuit, provincia, contacto, ing_brutos, t_factura, t_iva From clientes Order by r_social, deuda "
 


Me gustaría ordenarlo por r_social y la deuda que tiene cada cliente. Necesitaría mostrarlo por orden alfabético y aquellos cuya deuda es <> 0 y a continuación por orden alfabético y los que tienen deuda = 0. El ordenamiento de este query no funciona. Alguna idea ? Muchas gracias

Saludos
horacio
 
Posts: 1363
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Re: OT ordenamiento de un query

Postby Daniel Garcia-Gil » Fri Dec 05, 2014 5:33 pm

Puedes separarlas en dos sentencias y unirlas con "UNION",

select ... from ... where deuda != 0 order by r_social, deuda UNION ALL select ... from ... where deuda = 0 order by r_social, deuda
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: OT ordenamiento de un query

Postby horacio » Fri Dec 05, 2014 6:49 pm

Daniel, muchas gracias por tu sugerencia. Pruebo y comento.

Saludos
horacio
 
Posts: 1363
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Re: OT ordenamiento de un query

Postby horacio » Tue Dec 09, 2014 12:47 pm

Daniel, he probado tu sugerencia y encuentro el siguiente problema. El query en cuestión llama a la función "deudacliente" cuyo alias es "deuda" pero al ponerlo en el where me genera un error ya que "deuda" no es ninguna columna de la tabla.

Code: Select all  Expand view  RUN

select codigo, r_social, deudacliente( 160, codigo ) as deuda from clientes where deuda <> 0 order by r_social "


Se me ocurre que el motor evalúa primero el where ( por lo tanto "deuda" no está definido ) y después toma las columnas. Si pongo la función en el where, es decir

Code: Select all  Expand view  RUN

select codigo, r_social, deudacliente( 160, codigo ) as deuda from clientes where deudacliente( 160, codigo )  <> 0 order by r_social "


ejecutará dos veces la función, y la consulta se hace pesada. Hay alguna otra manera ?. Gracias

Saludos
horacio
 
Posts: 1363
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Re: OT ordenamiento de un query

Postby Daniel Garcia-Gil » Tue Dec 09, 2014 3:01 pm

Hola

prueba esto, lo hice aqui al vuelo, no se si funciona, puedes contarme via gtalk (hangout de google) danielgarciagil@gmail.com o skype: daniel.garcia.gil

Code: Select all  Expand view  RUN

select
  codigo,
  r_social,
  deuda1.deuda
from clientes
inner join (
  select
    codigo,
    deudacliente( 160, codigo ) as deuda
  from clientes
  group by codigo
) deuda1 on deuda1.codigo = clientes.codigo
deuda1.deuda <> 0 order by r_social
 
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: OT ordenamiento de un query

Postby horacio » Tue Dec 09, 2014 3:38 pm

Gracias por tu respuesta, pruebo y comento.

Saludos
horacio
 
Posts: 1363
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 23 guests