Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

uso de alias de un campo

Estas en el tema de uso de alias de un campo en el foro de PostgreSQL en Foros del Web. Saludos Tengo la consulta: Código: SELECT recibo.reciboc03, recibo.reciboc04, recibo.reciboc28, CASE WHEN (recibo.reciboc03::integer % 2) = 0 THEN 'Segunda'::text ELSE 'Primera'::text END AS quincena, CASE reciboc04 ...
  #1 (permalink)  
Antiguo 07/10/2011, 12:46
 
Fecha de Ingreso: agosto-2005
Ubicación: Mérida, Venezuela
Mensajes: 732
Antigüedad: 18 años, 8 meses
Puntos: 7
uso de alias de un campo

Saludos
Tengo la consulta:
Código:
SELECT recibo.reciboc03, recibo.reciboc04, recibo.reciboc28,
        CASE
            WHEN (recibo.reciboc03::integer % 2) = 0 THEN 'Segunda'::text
            ELSE 'Primera'::text
        END AS quincena, 
        CASE reciboc04
		WHEN 'EM' THEN quincena ||' Quincena - '|| mes ||' - '|| agno ||')'
		WHEN 'OB' THEN 'Semana '||reciboc03||')'
		ELSE reciboc28
	END AS titulo
FROM recibo
  GROUP BY recibo.reciboc03, recibo.reciboc04, recibo.reciboc28;
y obtengo: ERROR: no existe la columna «quincena»

donde quincena es un alias... ¿cuál es la forma de utilizar un alias dentro de la misma consulta?

Gracias
__________________
Gracias de todas todas
-----
Linux!
  #2 (permalink)  
Antiguo 07/10/2011, 18:20
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: uso de alias de un campo

hola cacr.

veo dos cosas.
Para asignarle un alias a la sentencia CASE se recomienda encerrar esta entre parentesis.
(CASE
WHEN (recibo.reciboc03::integer % 2) = 0 THEN 'Segunda'::text
ELSE 'Primera'::text
END) AS quincena


Lo segundo que veo es la agrupación. Quincena y titulo son campos creados en memoria, pero igual harán parte de la consulta, por lo que te exigirá que también sean incluidos como campos.


Lo que se me ocurre es otro nivel de subconsulta.
Código SQL:
Ver original
  1. SELECT reciboc03,reciboc04,reciboc28,quincena,titulo
  2. FROM
  3. (
  4. SELECT recibo.reciboc03, recibo.reciboc04, recibo.reciboc28,
  5.         (CASE
  6.             WHEN (recibo.reciboc03::INTEGER % 2) = 0 THEN 'Segunda'::text
  7.             ELSE 'Primera'::text
  8.         END) AS quincena,
  9.        (CASE reciboc04
  10.         WHEN 'EM' THEN quincena ||' Quincena - '|| mes ||' - '|| agno ||')'
  11.         WHEN 'OB' THEN 'Semana '||reciboc03||')'
  12.         ELSE reciboc28
  13.     END) AS titulo
  14. FROM recibo
  15. ) AS t
  16. GROUP BY reciboc03,reciboc04,reciboc28,quincena,titulo;
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 10/10/2011, 08:03
 
Fecha de Ingreso: agosto-2005
Ubicación: Mérida, Venezuela
Mensajes: 732
Antigüedad: 18 años, 8 meses
Puntos: 7
Respuesta: uso de alias de un campo

Saludos!
Lo que obtengo
Código:
ERROR:  no existe la columna «quincena»
LÍNEA 9:     WHEN 'EM' THEN quincena ||' Quincena - '|| mes ||' - '||...
Me funciona
Código:
SELECT recibo.reciboc03, recibo.reciboc04, recibo.reciboc28, 
  CASE
    WHEN (recibo.reciboc03::integer % 2) = 0 THEN 'Segunda'::text
    ELSE 'Primera'::text
  END AS quincena, 
  CASE recibo.reciboc04
    WHEN 'EM'::text THEN ((
    CASE
      WHEN (recibo.reciboc03::integer % 2) = 0 THEN 'Segunda'::text
      ELSE 'Primera'::text
    END || ' Quincena - '::text)) 
    WHEN 'OB'::text THEN 'Semana '::text || recibo.reciboc03::text
    ELSE initcap(recibo.reciboc28::text)
  END AS titulo
FROM recibo
GROUP BY recibo.reciboc03, recibo.reciboc04, recibo.reciboc28;
Cosa que me gusta poco... pero me funciona...
__________________
Gracias de todas todas
-----
Linux!

Etiquetas: alias, campos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:02.