Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-04-2007
Avatar de Carmelo Cash
Carmelo Cash Carmelo Cash is offline
Miembro
 
Registrado: jul 2003
Ubicación: Buenos Aires
Posts: 261
Poder: 21
Carmelo Cash Va por buen camino
Parametro en un cálculo. Se puede?

Hola amigos del foro. Estoy con un problema y tal vez me pueden ayudar. Estoy utilizando InterBase y Delphi 7. Resulta que escribí una consulta que es una belleza. Muestra el total de ventas y la comision del vendedor.

Es algo así (no coloco la verdadera porque es muy larga).

select Vendedor, sum (importe) as Importe
from ventas
where vendedor =:P_Vendedor
group by Vendedor

union

select 'comision', sum(importe) * 5/100
where vendedor =:P_Vendedor


esto arroja el siguiente resultado.
----------------
Venedor importe
-----------------
Gonzales 1000
Comision 50

Hasta acá todo bien, cambiando el parámetro P_Vendedor está resuelto.
Pero resulta que distintos vendedores tienen distintas comisiones entonces debo reemplazar el 5 por un parámetro. La union debería ser algo así:

select 'comision', sum(importe) * :P_Comision /100
where vendedor =:P_Vendedor

El problema es que esto parece que está mal porque me da un error. Está bien que esté mal?

El Error que aparece es:

"Invalid modify request. Array/Blob/Date data types not allowed in arithmetic"

Bueno espero que alguien pueda darme una mano.
Desde ya muchas gracias.
Responder Con Cita
  #2  
Antiguo 11-04-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
No sé especificamente en Interbase, pero normalmente los parámetros son sólo para valores de campos, como el caso de :p_vendedor.

Se me ocurre que podrías tener una tabla comisiones donde almacenes la comisión de cada vendedor, y enlaces esta tabla en la consulta. Algo como esto:

Código SQL [-]
select 'comision', sum(importe) * comisiones.comision /100
from ventas
left join comisiones on comisiones.vendedor = vendedor
where vendedor =:P_Vendedor

// Saludos
Responder Con Cita
  #3  
Antiguo 11-04-2007
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Estoy con lo que dice Román. De hecho yo tengo algunos programas que calculan comisiones y cada vendedor tiene 3 tipos de comisión dependiendo precios de venta... y los tipos de comisión se almacenan en la Tabla Vendedores.

La variante que tengo yo es que cada linea de venta contiene un número del 1..3 para mostrar el tipo de comisión que hay que calcular, claro está el tipo 1 no es igual para todos los vendedores, por eso hay que terminar realizando un encuentro con la tabla Vendederes del tipo que apunta Román.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #4  
Antiguo 11-04-2007
Avatar de Carmelo Cash
Carmelo Cash Carmelo Cash is offline
Miembro
 
Registrado: jul 2003
Ubicación: Buenos Aires
Posts: 261
Poder: 21
Carmelo Cash Va por buen camino
Gracias funcinó

En realidad las comisiones ya las tenía en una tabla, entonces hice el Join y listo.
Roman: Si no fueras hombre me enamoraría de vos.......Igual cuidate!!!
Jejejee saludos
Responder Con Cita
  #5  
Antiguo 11-04-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¡Claro! No sé porque pensé en una tabla extra siendo que lo lógico era empezar con un campo en la misma tabla de vendedores a menos que la situación se más compleja como la que describes Marcos.

¡Qué bueno que lo apuntaste!

// Saludos
Responder Con Cita
  #6  
Antiguo 12-04-2007
[basti] basti is offline
Miembro Premium
 
Registrado: ago 2004
Posts: 388
Poder: 20
basti Va por buen camino
hola, aunque el problema está resuelto, la consulta que daba error
Código SQL [-]
select 'comision', sum(importe) * :P_Comision /100
where vendedor =:P_Vendedor
es correcta, supongo por el error que te daba, que el problema está en que no le habías asignado el tipo de dato al parámetro:

Código Delphi [-]
  query.ParamByName('P_comision').DataType := ftFloat;
  query.ParamByName('P_comision').AsFloat := 5;
  query.Open;
Responder Con Cita
  #7  
Antiguo 12-04-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Muy interesante tu apreciación basti.

Me lo apunto .

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #8  
Antiguo 12-04-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Muy cierto, estaba yo en un error. Los parámetros sustituyen valores y eso incluye el que originalmente se pedía. Lo que no puede sistituirse son nombres de campos, nombres de tablas, etc.

Lamento la confusión y gracias basti por la aclaración.

// Saludos
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
Integrales (Calculo) D-MO Varios 4 07-09-2006 19:52:53
calculo en SELECT mangk SQL 6 16-08-2005 20:03:55
calculo letra NIE Cabanyaler Varios 3 29-03-2005 12:19:42
Calculo en dbgrid rmnart Firebird e Interbase 4 14-06-2004 20:29:19
Calculo de Años jrcosta75 Varios 17 24-02-2004 22:32:36


La franja horaria es GMT +2. Ahora son las 00:30:35.


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