Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Buenos dias:
Tengo el siguiente problema en el que me he atascado.
Parto de 2 tablas y quiero calcular la columna coste final de la primera tabla.
Esta se calcula multiplicando el nº de Km por el COEFICIENTE que aparece en la tabla de la derecha : Sobra decir que el sistema lo que deberia hacer es coger los km, buscar en el rango y agencia correspondiente y aplicarle el COEFICIENTE
Si alguien me puede ayudar se lo agradaceria de antemano....
agencia | Km | coste final | agencia | RANGO Km | COEFICIENTE | |
A | 49 | 49*1 | A | 0-50 | 1 | |
A | 125 | 125*2 | A | mas de 50 | 2 | |
B | 24 | 24*3 | B | 0-75 | 3 | |
B | 200 | 200*4 | B | mas de 75 | 4 |
Lo mas sencillo sería que la tabla 2 la transformaras en:
Agencia Rango (Km) Coef_1 Coef_2
A 50 1 2
B 75 3 4
de forma que si los Km < Rango aplicas C1 y si es superior aplicas C2.
No se si me he explicado bien.
Si no lo sacas, dímelo y lo trabajamos mas.
Te añado un ejemplo con lo dicho
Hola,
La solución de Enrique es buena y sino lo tendrás que hacer con If's, pero te saldrán unos "cuantos", dependiendo de la cantidad de agencias y rangos que tengas.
Saludos,
Hola,
Le estaba dando vueltas al tema.. y no se me ocurre nada más que la opción que te da Enrique o en el caso de que tengas pocas agencias, rangos y coeficientes hacer unos simple IF
If(agencia='A',If(Km<=50,Km*1,Km*2),If(Km<=75,Km*3,Km*4))
Otras funciones que podrían serte útiles para este caso son las de Pick y Match.
Si quieres lo seguimos viendo para ver que opciones más hay.
Saludos,
Hola.
Una alternativa de solución es que estructures bien tus tablas en el Editor de Script, esto puede ayudarte para múltiples Rangos de Kms que pueda tener las Agencias.
Detallo un ejemplo (Las tablas INLINE puede ser reemplazada con cualquier fuente de datos).
//Primera tabla que se carga
Agencia:
LOAD * INLINE [
Agencia, Km
A, 49
A, 125
B, 24
B, 200
];
//haciendo un left con la segunda tabla, cada fila de la primera tabla sera repetido n veces según la llave de la segunda tabla
//Se ha creado mas campos adicional a los que mostraste con la finalidad de hacer mas robusta el diseño de las tablas
//Campo Secuencia va servir de llave al final, RangoKm como descripción, RangoMin y RangoMax como campos de evaluación
left join (Agencia)
LOAD * INLINE [
Agencia,Secuencia,RangoKm,RangoMin, RangoMax, Coeficiente
A, A1,0-50, 0, 50, 1
A, A2,mas de 50, 50, 1000,2
B, B1,0-75, 0, 75, 3
B, B2,mas de 75, 75, 1000, 4
];
//En base a la tabla Agencia creamos la tabla TempAgencia, en donde aplicamos una condicional que determina si el campo "Km" esta en un rango.
TempAgencia:
LOAD
Agencia,
Km,
Secuencia,
if(Km>RangoMin and Km<RangoMax,1,0) as Cod
Resident Agencia;
//Borramos la tabla Agencia ya que la tabla TempAgencia ahora nos sirve como base
Drop table Agencia;
//En base a la tabla TempAgencia volvemos crear una tabla con el nombre Agencia, el cual sera filtrado solo los que se encuentren en su rango y agregamos el campo "Secuencia" el cual sera llave de la 2da Tabla.
Agencia:
LOAD
Agencia,
Km,
Secuencia
Resident TempAgencia
where Cod=1;
//Borramos la tabla TempAgencia por que ya no se va utilizar
Drop Table TempAgencia;
//Creamos la 2da Tabla AgenciaKm pero acá no estamos considerando el campo "Agencia" ya que si se considera se tendría 2 llaves en ambas tablas y esto crearía tabla con llaves sintéticas.
AgenciaKm:
LOAD * INLINE [
Secuencia,RangoKm, RangoMin, RangoMax, Coeficiente
A1,0-50, 0, 50, 1
A2,mas de 50, 50, 1000,2
B1,0-75, 0, 75, 3
B2,mas de 75, 75, 1000, 4
];
En base a esa nueva estructura podrás realizar tu expresión.
Espero te ayude en algo.
Atte.
Luis Valencia