FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
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:
|
#2
|
||||
|
||||
¿Y ese campo calculado "afiliados" qué hace exactamente?
|
#3
|
||||
|
||||
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.
__________________
Miguel Román Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !! Última edición por mRoman fecha: 10-05-2019 a las 16:29:15. |
#4
|
|||
|
|||
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 |
#5
|
||||
|
||||
Lo que se ve: Es un COUNT sobre otra tabla pero que me hace falta para el cálculo. Si no queda más remedio puedo hacer el cálculo después de ejecutar el query, pero me vendría bien hacerlo de una.
No, no es imprescindible. Cita:
Cita:
Algo así es lo que buscaba pero no acabo de ver como encajar tu sugerencia en mi query. Al fin y al cabo es lo que estoy haciendo yo; tu pones ( select count(*) from tbl_clientes )*1 as total1 y la variable es total1. Yo pongo (SELECT COUNT [...]) Afiliados y la variable sería Afiliados. ¿Qué más me da si luego me dice que no sabe que es Afiliados? |
#6
|
|||
|
|||
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... Última edición por manelb fecha: 10-05-2019 a las 20:22:37. |
#7
|
|||
|
|||
Creo que debería estar bien, pero sin BD para probar....
Ya me dirás.
Saludos... |
#8
|
||||
|
||||
En firebird no es necesario el "as", aunque se suele poner por compatibilidad con otros sistemas de BD.
|
#9
|
||||
|
||||
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:
__________________
El malabarista. |
#10
|
||||
|
||||
Gracias por vuestra ayuda.
Sale justo lo que me hace falta. Estupendo. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Campos calculados | Parsec | OOP | 4 | 26-06-2013 13:56:15 |
TClienDataSet Problemas con Campos Blob y Campos Calculados | LEVV | Conexión con bases de datos | 2 | 11-05-2012 01:25:43 |
campos calculados | ercrizeporta | Conexión con bases de datos | 7 | 11-06-2007 10:51:29 |
campos calculados | Nelly | SQL | 2 | 07-10-2005 18:13:51 |
Campos calculados | EITB | OOP | 1 | 28-09-2004 00:08:20 |
|