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

[SOLUCIONADO] concatenar con un alias

Estas en el tema de concatenar con un alias en el foro de Mysql en Foros del Web. hola estoy intentando esta consulta: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original SELECT t_asoc.nombre AS nasociacion , t_reg.nombre AS nregion , t_cc.nombre_cuenta AS ncuenta , t_s. ...
  #1 (permalink)  
Antiguo 25/04/2013, 13:51
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 14 años
Puntos: 23
concatenar con un alias

hola estoy intentando esta consulta:

Código MySQL:
Ver original
  1. SELECT t_asoc.nombre AS nasociacion, t_reg.nombre AS nregion, t_cc.nombre_cuenta AS ncuenta, t_s.*, FORMAT(t_s.total,2) AS total, FORMAT(t_s.h_gasto,0) AS h_gasto, FORMAT(t_s.h_sobrante,0) AS h_sobrante, CONCAT(t_s.mzasociacion,' - ', nasociacion) AS asocnom, CONCAT(t_s.mzregion,' - ', nregion) AS regnom, CONCAT(t_s.mzcuenta,' - ', ncuenta) AS cuentanom
  2. FROM db_pue.t_spue t_s
  3. LEFT JOIN db_clasificacion.t_regiones t_asoc ON t_asoc.asociacion = t_s.mzasociacion AND t_asoc.region = ''
  4. LEFT JOIN db_clasificacion.t_regiones t_reg ON t_reg.region = t_s.mzregion
  5. LEFT JOIN db_clasificacion.t_cuenta t_cc ON t_cc.cuenta = t_s.mzcuenta
  6. WHERE t_s.clave='12345' AND t_s.mzasociacion='4000' AND t_s.mzregion='1000' AND LEFT(t_s.fecha, 4)='2013'

Y me manda error:

Unknown column 'nasociacion' in 'field list'

claro por que es un alias.

si le quito los CONCAT funciona, peroooo

la idea de todos los left join es que al final necesito juntar en un solo "campo" calve - nombre es decir, clave asociacion - nombre asociacion, clave region - nombre recion, clave cuenta - nombre cuenta

como le hago? :S
  #2 (permalink)  
Antiguo 25/04/2013, 14:56
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: concatenar con un alias

Hola catpaw:

Tal como lo dices, no puedes utilizar un alias en el select para hacer alguna operación, porque el alías sólo existe hasta después de ejecutar la consulta. Lo que tienes que hacer es utilizar el nombre original:



Código:
SELECT 
  t_asoc.nombre AS nasociacion,
  t_reg.nombre AS nregion,
  t_cc.nombre_cuenta AS ncuenta,
   ...
  CONCAT(t_s.mzasociacion, ' - ', t_asoc.nombre) AS 
  CONCAT(t_s.mzregion, ' - ', t_reg.nombre) AS regnom,
  CONCAT(t_s.mzcuenta, ' - ', t_cc.nombre_cuenta) AS cuentanom 
FROMasocnom,
   ...
FROM
  db_pue.t_spue t_s 
...
Saludos
Leo.
  #3 (permalink)  
Antiguo 25/04/2013, 18:33
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 14 años
Puntos: 23
Respuesta: concatenar con un alias

wow!!!!

que simplesa jeje muchas gracias Leo ya funciona.

otra duda fuera del tema pero aprovechando el hilo...

como puedo darle a la consulta el numero de un mes y que me devuelva el nombre corto, si es posible en español???

probe:

Código MySQL:
Ver original
  1. MONTH(STR_TO_DATE('02', '%b'))

pero me da null

------------------------------------------> Edito

Código MySQL:
Ver original
  1. MONTHNAME(STR_TO_DATE('02', '%m'))

esto ya me da February

Ahora solo la duda como podria ser FEB con %b me sigue dando null

y si podria ser en español ???

gracias

Última edición por catpaw; 25/04/2013 a las 18:51
  #4 (permalink)  
Antiguo 29/04/2013, 08:22
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: concatenar con un alias

Hola catpaw:

Cita:
como puedo darle a la consulta el numero de un mes y que me devuelva el nombre corto, si es posible en español???
Puedes hacerlo con un CASE-WHEN... o de preferencia meter esto en una función, la idea sería hacer algo como esto:

Código MySQL:
Ver original
  1. mysql> SELECT
  2.     ->    CURDATE(),
  3.     ->    CASE MONTH(CURDATE()) WHEN 1 THEN 'ENE'
  4.     ->                        WHEN 2 THEN 'FEB'
  5.     ->                        WHEN 3 THEN 'MAR'
  6.     ->                        WHEN 4 THEN 'ABR'
  7.     ->                        WHEN 5 THEN 'MAY'
  8.     ->    END nombre_mes;
  9. +------------+------------+
  10. | CURDATE()  | nombre_mes |
  11. +------------+------------+
  12. | 2013-04-29 | ABR        |
  13. +------------+------------+
  14. 1 row in set (0.00 sec)

Saludos
Leo.
  #5 (permalink)  
Antiguo 29/04/2013, 09:43
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 14 años
Puntos: 23
Respuesta: concatenar con un alias

hola leo

una duda el nombre_mes seria un alias o es el nombre de un campo?

por que tengo:

Código MySQL:
Ver original
  1. CASE MONTH(RIGHT(fecha,2))
  2. WHEN 01 THEN 'ENE'
  3. WHEN 02 THEN 'FEB'
  4. WHEN 03 THEN 'MAR'
  5. WHEN 04 THEN 'ABR'
  6. WHEN 05 THEN 'MAY'
  7. WHEN 06 THEN 'JUN'
  8. WHEN 07 THEN 'JUL'
  9. WHEN 08 THEN 'AGO'
  10. WHEN 09 THEN 'SEP'
  11. WHEN 10 THEN 'OCT'
  12. WHEN 11 THEN 'NOV'
  13. WHEN 12 THEN 'DIC'
  14. END nmes_f,

pero nmes_f lo estoy poniendo como alias, es decir, no tengo un campo llamado asi.

Y me sale null

le agregue END AS nmes_f y salee null

el campo fecha lo tengo asi 201304 -> AñoMes entonces con RIGHT extraigo solo el mes.

Última edición por catpaw; 29/04/2013 a las 09:50
  #6 (permalink)  
Antiguo 29/04/2013, 09:51
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: concatenar con un alias

Cita:
el campo fecha lo tengo asi 201304 -> AñoMes entonces con RIGHT extraigo solo el mes.
Pues, eso es un error de los muy severos...
Una fecha debe ser siempre DATE, DATETIME o TIMESTAMP. El hecho de que no uses el día, resulta irrelevante. Y si es un VARCHAR... bueno, eso es un erro mayor aún.

En cualquier caso, si es un VARCHAR requiere el uso de funciones:
Código MySQL:
Ver original
  1. CASE MONTH(STR_TO_DATE(fecha, '%Y%m'))
  2. WHEN 01 THEN 'ENE'
  3. WHEN 02 THEN 'FEB'
  4. WHEN 03 THEN 'MAR'
  5. WHEN 04 THEN 'ABR'
  6. WHEN 05 THEN 'MAY'
  7. WHEN 06 THEN 'JUN'
  8. WHEN 07 THEN 'JUL'
  9. WHEN 08 THEN 'AGO'
  10. WHEN 09 THEN 'SEP'
  11. WHEN 10 THEN 'OCT'
  12. WHEN 11 THEN 'NOV'
  13. WHEN 12 THEN 'DIC'
  14. END nmes_f,

De todos modos, te recomiendo enfáticamente que no crees bases de datos con defectos de diseño como el que mencionas. Sólo obtendrás trash data, y con eso sólo obtienes luego... más trash data.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 29/04/2013, 09:56
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 14 años
Puntos: 23
Respuesta: concatenar con un alias

hola gnzsoloyo

Cita:
que no crees bases de datos con defectos de diseño como el que mencionas
Lo se el problema es que yo no cree la base :S y tengo que trabajar en ella adaptanme a como esta.

ya obtuve el resultado quitando el month:

Código MySQL:
Ver original
  1. CASE RIGHT(fecha,2)
  2. WHEN '01' THEN 'ENE'
  3. WHEN '02' THEN 'FEB'
  4. WHEN '03' THEN 'MAR'
  5. WHEN '04' THEN 'ABR'
  6. WHEN '05' THEN 'MAY'
  7. WHEN '06' THEN 'JUN'
  8. WHEN '07' THEN 'JUL'
  9. WHEN '08' THEN 'AGO'
  10. WHEN '09' THEN 'SEP'
  11. WHEN '10' THEN 'OCT'
  12. WHEN '11' THEN 'NOV'
  13. WHEN '12' THEN 'DIC'
  14. END AS nmes_f,

Gracias

Etiquetas: alias, campo, concatenar, join, select
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 13:15.