Ir al contenido


Foto

[RESUELTO] Concatenar sql


  • Por favor identifícate para responder
7 respuestas en este tema

#1 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 24 mayo 2010 - 12:59

Hola
En access hago esto:


sql
  1. SELECT FacturaItem.Serie AS [Número de Pieza], FacturaItem.CodParte AS Código,
  2. [Descripcion]+" "+[Categoria]+" "+[SubCategoria] AS Descripción
  3. FROM FacturaItem INNER JOIN Articulos ON FacturaItem.CodParte = Articulos.CodParte



Con esto me regresa la descripcion, la categoria y la subcategoria en una linea de nombre descripcion.
Como hago esta concatenacion en firrebird?.
Saludos
  • 0

#2 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 24 mayo 2010 - 01:09

Hola
Resuelto.
Hay que usar unas lineas raras, quedaria asi:


sql
  1. SELECT FacturaItem.Serie AS NumerodePieza, FacturaItem.CodParte AS Codigo,
  2. (Articulos.descripcion|| ' ' ||Articulos.categoria|| ' ' ||Articulos.subcategoria) AS Descrip
  3. FROM FacturaItem INNER JOIN Articulos ON FacturaItem.CodParte = Articulos.CodParte


Saludos
  • 0

#3 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 24 mayo 2010 - 01:13

Hola



sql
  1. SELECT FacturaItem.Serie AS [Número de Pieza], FacturaItem.CodParte AS Código,
  2. Descripcion || ' ' || Categoria || ' ' || SubCategoria AS Descripción
  3. FROM FacturaItem INNER JOIN Articulos ON FacturaItem.CodParte = Articulos.CodParte



Lo que no tengo idea de como asignar esto [Número de Pieza] como un AS

Ah vaya, me ganaste :p

Salud OS
  • 0

#4 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 24 mayo 2010 - 01:18

Hola
Si, en firebird, no acepta que los nombres que contenga AS se separen, tienen que estar junticos jejej.
Saludos
PD: Voy rapido jejej
  • 0

#5 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 24 mayo 2010 - 01:18

Solo para complementar, cuando se concatenan cadenas y una de las cadenas tiene un null, el resultado te dará null, para evitar eso hay que utilizar una funcion que se llama coalesce.



sql
  1. ( COALESCE( Articulos.descripcion, '' ) || ' ' ||
  2.   COALESCE( Articulos.categoria, '' ) || ' ' ||
  3.   COALESCE( Articulos.subcategoria, '' )) AS Descrip



Salud OS
  • 0

#6 Faust

Faust

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 213 mensajes
  • LocationDistrito Federal

Escrito 24 mayo 2010 - 03:19

Solo para complementar, cuando se concatenan cadenas y una de las cadenas tiene un null, el resultado te dará null, para evitar eso hay que utilizar una funcion que se llama coalesce.



sql
  1. ( COALESCE( Articulos.descripcion, '' ) || ' ' ||
  2.   COALESCE( Articulos.categoria, '' ) || ' ' ||
  3.   COALESCE( Articulos.subcategoria, '' )) AS Descrip



Salud OS


Así es, y cuando sumas p. ej. una columna y hay entre ellos un null, también devuelve null... algo que me trajo loco por dos días hace dos años, no recuerdo como lo resolví .
  • 0

#7 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.484 mensajes
  • LocationMallorca

Escrito 25 mayo 2010 - 04:40

Hola.

Así es, y cuando sumas p. ej. una columna y hay entre ellos un null, también devuelve null... algo que me trajo loco por dos días hace dos años, no recuerdo como lo resolví .


Se soluciona igual, con el coalesce, pero esta vez con un 0 para que sume 0 si el campo es nulo.

select sum(coalesce(campo, 0)) from ***
  • 0

#8 Faust

Faust

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 213 mensajes
  • LocationDistrito Federal

Escrito 25 mayo 2010 - 09:12

Hola.


Así es, y cuando sumas p. ej. una columna y hay entre ellos un null, también devuelve null... algo que me trajo loco por dos días hace dos años, no recuerdo como lo resolví .


Se soluciona igual, con el coalesce, pero esta vez con un 0 para que sume 0 si el campo es nulo.

select sum(coalesce(campo, 0)) from ***


Gracias por recordármelo Marc, ese tipo de cosas se deben tener presentes en muchos tipos de desarrollo.
  • 0




IP.Board spam blocked by CleanTalk.