Hola a todos,

estoy intentando crear una vista en la cual el valor de tres columnas (pongamos por caso ptotal1,ptotal2,ptotal3) depende de los valores de varias columnas de la tabla original (pngamos por caso peso1,peso2,peso3).

En la tabla de origen pueden haber registros con los tres pesos, con dos, con uno o con ninguno. Si no hubiera ningún peso registrado, el valor de la columna ptotalX (entendido como una generalización de ptotal1,2,3..) sería NULO. Si, por el contrario, alguno de los valores existiese, cada columna ptotalX tomaría el valor pesoX, salvo que si pesoX es nulo tendría que tomar el valor 0, para que lo veáis mejor os muestro las 3 diferentes posibilidades:
CASO 1
pesol1=2.34 --> ptotal1=2.34
pesol2=2.44 --> ptotal2=2.44
pesol3=3.55 --> ptotal3=3.55

CASO 2
pesol1=null --> ptotal1=0
pesol2=2.44 --> ptotal2=2.44
pesol3=3.55 --> ptotal3=3.55

CASO 3
pesol1=null --> ptotal1=null
pesol2=null --> ptotal2=null
pesol3=null --> ptotal3=null

Lo estaba intentando hacer con un case creando un array de los tres campos y empleando any/some, pero no funciona probablemente porque se pierde un poco comparando valores nulos. Esto es lo que he hecho para cada uno de las columnas de la vista:

case when null!=any(array[peso1,peso2,peso3) and peso1 is null then 0 else peso1 end as ptotal1 (con lo cual, si todos son nulos me pondrá nulo y si alguno de los pesos no lo es, me pondra el peso si el peso no es nulo y nulo si sí lo es)

Esto para el ptotal1, con los otros dos igual

Esto ya he comprobado que no funciona. ¿Alguna sugerencia?

Un saludo

jorge Tornero
IEO-Cádiz


-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org)
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda

Responder a