SELECT con campos calculados y condicionados
¿Puede hacerse un query con un campo calculado en función de otro también calculado?
A ver si me explico mejor. Me interesa sacar un query de este estilo: Pero al ejecutar el CASE, lógicamente, me da un error: Cita:
|
¿Y ese campo calculado "afiliados" qué hace exactamente?
|
Cita:
Y la parte del ELSE, no aplica la cuestión algebraica:
Ahora que lo reescribo...veo que deberias agregar nuevamente toda la sentencia que calcula a "Afiliados", quedaría algo así:
Prueba el Query y nos comentas.... Saludos. |
Para no tener que ejecutar la sentencia de "afiliados" dos veces, en algunas consultas similares, yo guardo el resultado en una variable.
El resultado será el mismo que con lo que te ha propuesto mRoman, pero en el caso de muchos registros, la diferencia de rendimiento puede ser significativa. Un ejemplo en dos consultas de muestra que no tienen nigún sentido, solo ilustrar lo que quiero explicar:
La primera consulta siempre tarda lo mismo, aunque añadas más columnas calculadas. En cambio la segunda versión, penaliza mucho por cada nueva columna. Hay que tener en cuenta que las columnas se ejecutan de derecha a izquierda por lo que el RDB$SET_CONTEXT debe ser la columna más a la derecha para que las de la izquierda recuperen su valor actualizado. Columnas situadas a la derecha del RDB$SET_CONTEXT recuperarian el valor de la consulta anterior. Saludos |
Cita:
Cita:
Cita:
Cita:
Cita:
|
Cita:
No, la variable no es Total1. Total1 es el nombre de la columna. Yo utilizo variables en la primera de las dos consultas que he enviado, y el nombre de la variable es: 'CONTADOR_MBM' Fíjate que RDB$SET_CONTEXT guarda el valor en la variable y RDB$GET_CONTEXT lo recupera. Voy a intentar adaptar esto a tu consulta y te lo passo... |
Creo que debería estar bien, pero sin BD para probar....
Ya me dirás.
Saludos... |
En firebird no es necesario el "as", aunque se suele poner por compatibilidad con otros sistemas de BD.
|
El "truco" general es muy simple. Puedes insertar un select siempre donde hay un nombre de tabla:
Esto es lo mismo que hace un VIEW, solo que CREATE VIEW "guarda" ese SQL con un nombre. Sabiendo esto, es solo de "partir" en 2 la sentencia: Crear un VIEW "anónimo" y luego jalar los datos:
|
Gracias por vuestra ayuda.
Cita:
|
La franja horaria es GMT +2. Ahora son las 22:53:12. |
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