Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-01-2022
amadis amadis is offline
Miembro
 
Registrado: may 2005
Ubicación: San José, Colón, Entre Ríos, Argentina
Posts: 315
Poder: 20
amadis Va por buen camino
consulta firebird 3 con IIF y group by

Buenas tardes compañeros.

Disculpen que no se me ocurrio un titulo mas claro

Pero la cuestion es la siguiente tengo una consulta para generar estadisticas de articulos vendidos.

Y necesito entre varias cosas calcular el margen de ganancia

I para evitar error de division por 0 uso IIF

Y resulta que al agregar esa linea me pide que agrupe por el campo detalleventa.costo (que es algo que no quiero porque no sirve)
Ese campo es siempre distinto, seria el ultimo costo del articulo vendido, y lo utilizo para calcular el costo promedio de un articulo a lo cargo del tiempo y como cambia no seria un campo para agrupar, pero al calcular con el IIF me pide que agrupe por ese campo.

¿de que forma podria evitar que me lo pida en group by?

Código SQL [-]
select 

detalleventa.art, detalleventa.descripcion, alicuotas.porcent, sum(detalleventa.costo* alicuotas.porcent)/sum(detalleventa.cant)as costoprom, articulos.costo as costoactual,
sum(detalleventa.total) as total, sum(detalleventa.cant) as cant, sum(detalleventa.cant) * articulos.peso as kilos,

  IIF ( (detalleventa.costo * alicuotas.porcent) > 0,(sum(detalleventa.total)/sum(detalleventa.cant))/(detalleventa.costo *  alicuotas.porcent), 0) as Margen

from detalleventa

inner join facturas
on detalleventa.numero = facturas.id

inner join articulos
on articulos.id = detalleventa.art

inner join alicuotas
on articulos.iva = alicuotas.id

where facturas.fecha > :fe

group by detalleventa.art, detalleventa.descripcion, alicuotas.porcent, articulos.costo, articulos.peso

order by cant asc
Responder Con Cita
  #2  
Antiguo 14-01-2022
ASAPLTDA ASAPLTDA is offline
Miembro
 
Registrado: jun 2003
Ubicación: COLOMBIA-CALI
Posts: 639
Poder: 22
ASAPLTDA Va por buen camino
onsulta firebird 3 con IIF y group by

Buenas Noches,
con firebird3 puede usa una function sql y no necesita agrupar
Responder Con Cita
  #3  
Antiguo 14-01-2022
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 20
kuan-yiu Va camino a la fama
Puedes usar case que no necesita agrupar
Código SQL [-]
select loquesea, (CASE WHEN tuCondicion THEN esteCalculo ELSE esteOtroCalculo END) as Margen
from miTabla
Responder Con Cita
  #4  
Antiguo 15-01-2022
amadis amadis is offline
Miembro
 
Registrado: may 2005
Ubicación: San José, Colón, Entre Ríos, Argentina
Posts: 315
Poder: 20
amadis Va por buen camino
Cita:
Empezado por kuan-yiu Ver Mensaje
Puedes usar case que no necesita agrupar
Código SQL [-]
select loquesea, (CASE WHEN tuCondicion THEN esteCalculo ELSE esteOtroCalculo END) as Margen
from miTabla
Hola Buenos dias

Estoy intetando usar CASE de la siguiente manera, pero me sigue pidiendo que agrupe por el campo "detalleventa.costo"

para este caso del IIF

Código SQL [-]
 IIF ( (detalleventa.costo * alicuotas.porcent) > 0,(sum(detalleventa.total)/sum(detalleventa.cant))/(detalleventa.costo *  alicuotas.porcent), 0) as Margen

Lo he traducido al siguiente CASE

Código SQL [-]
 (CASE WHEN (detalleventa.costo * alicuotas.porcent) > 0  THEN (sum(detalleventa.total)/sum(detalleventa.cant))/(detalleventa.costo *  alicuotas.porcent) ELSE 0 END) as Margen

Y necesito agrupar por estos campos
group by detalleventa.art, detalleventa.descripcion, alicuotas.porcent, articulos.costo, articulos.peso

Para generar la estadistica y que quede una linea unica por articulo vendido (detalleventa.art es el ID de art ) con las sumatorias y promedios calculados de cada articulo

Y al pedirme que incorpore el campo detalleventa.costo (que es el ultimo costo de venta) como ese con la inflacion va cambiando a lo largo del tiempo no es unico y de pronto me encuentro con registros de articulos duplicados y agrupados por el costo de venta
Responder Con Cita
  #5  
Antiguo 15-01-2022
amadis amadis is offline
Miembro
 
Registrado: may 2005
Ubicación: San José, Colón, Entre Ríos, Argentina
Posts: 315
Poder: 20
amadis Va por buen camino
Cita:
Empezado por ASAPLTDA Ver Mensaje
Buenas Noches,
con firebird3 puede usa una function sql y no necesita agrupar
Que funcion deberia usar en lugar del IIF?

OJO que al resultado lo necesito agrupado por los campos deseados para que queda un registro por cada articulo existente, con los promedios y calculos de venta.
Responder Con Cita
  #6  
Antiguo 17-01-2022
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.412
Poder: 22
fjcg02 Va camino a la fama
Hola,

añade esto

IIF ( (detalleventa.costo * alicuotas.porcent) > 0

al group by

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #7  
Antiguo 18-01-2022
amadis amadis is offline
Miembro
 
Registrado: may 2005
Ubicación: San José, Colón, Entre Ríos, Argentina
Posts: 315
Poder: 20
amadis Va por buen camino
Cita:
Empezado por fjcg02 Ver Mensaje
Hola,

añade esto

IIF ( (detalleventa.costo * alicuotas.porcent) > 0

al group by

Saludos
Si agrego

Código SQL [-]
IIF ( (detalleventa.costo * alicuotas.porcent) > 0,(sum(detalleventa.total)/sum(detalleventa.cant))/(detalleventa.costo *  alicuotas.porcent), 0) as Margen

me da error del AS, le saco el as margen y da error

Cannot use an aggregate or window function in a GROUP BY clause

Pero no entiendo que agregarle IIF al group pueda ser la solucion.

Lo del case parece acercarse

Pero necesito agrupar el resultado por los campos que tengo en group by
Responder Con Cita
  #8  
Antiguo 18-01-2022
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 20
kuan-yiu Va camino a la fama
Si te pide otro campo agregado es que lo necesita. No hay más vuelta de rosca.

Añade al group by solo: ' (detalleventa.costo * alicuotas.porcent) ', con eso debería funcionar y luego haz una select de tu select para agrupar el resultado como tu quieres.
Tendrás que probar si tienes una equivalencia matemática con el resultado, porque esto parece un problema de mates no de SQL. O tendrás que tratar de calcularlo de otro modo. Siempre hay más de un sistema.

También puedes probar a construir primero una tabla con los cálculos que necesitas (tupla a tupla), sin agrupar y luego sobre esa select hacer otra agrupada:

Código SQL [-]
select sum(uno), sum(dos), tres, cuatro
from (
select tusCamposSinSumatoriosPeroConMultiplicacionesYcondiciones_UnoDosTresCuatro from tus tablas
where tuCondicion
) group by tres, cuatro

Última edición por kuan-yiu fecha: 18-01-2022 a las 14:47:59.
Responder Con Cita
  #9  
Antiguo 19-01-2022
amadis amadis is offline
Miembro
 
Registrado: may 2005
Ubicación: San José, Colón, Entre Ríos, Argentina
Posts: 315
Poder: 20
amadis Va por buen camino
No se me había ocurrido un Selec del otro Select, eso ayudó. Gracias a todos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Consulta con Group By jars SQL 2 12-11-2012 14:47:02
Consulta con Group By y Max gluglu SQL 3 21-03-2012 16:17:21
Consulta con Group By SQL DasGrun SQL 2 22-01-2010 17:28:02
Consulta con group by y min zvf SQL 2 21-04-2008 21:13:25
Consulta Con Group By VRO SQL 9 30-08-2004 19:06:07


La franja horaria es GMT +2. Ahora son las 01:55:32.


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