Mostrando entradas con la etiqueta SQL. Mostrar todas las entradas
Mostrando entradas con la etiqueta SQL. Mostrar todas las entradas

martes, 2 de octubre de 2012

Firebird campos multivalorados o con multivalores (multivalue) combinado con case


El día de hoy me enfrente al detalle de obtener un reporte con multi-valores, esto es en una fila colocar los datos de una tabla y posteriormente en una sola celda aparezcan datos de otra tabla donde esta vinculada del tipo foreign key, dejo aqui la consulta para que sirva de referencia...


select
factura, fecha,

case motivoservicio
when 1 then 'Falla en Software'
when 2 then 'Garantía'
when 3 then 'Mantenimiento Preventivo'
end as servicio,

(select nombre from sucursales where CLAVE=r.clave) as sucursal,

(select list(case id_tipo
when 1 then 'Reinstalación'
when 2 then 'Virus'
when 3 then 'Configuración'
when 4 then 'Otro'
end,' / ')
from tipos_soporte a
where r.factura = a.factura group by a.factura) as soporte,

from registro_servicios r
where
cancelado = 0 and
fecha = '2012-10-02'


Esto producirá un resultado como el siguiente:
facturafechaserviciosucursalsoporte
102912012-10-02Falla en SoftwareVallartaReinstalación / Virus
102922012-10-02Falla en SoftwareVallartaVirus / Configuración
103012012-10-02GarantíaCihuatlánOtro
103062012-10-02GarantíaGuadalajaraVirus



Es importante hacer mención que esta consulta será compatible con firebird versión 2.1 en delante, por el uso de LIST().

Espero les sea de utilidad.


Referencias:
http://www.janus-software.com/fbmanual/manual.php?book=psql&topic=56
http://www.developeando.com/2009/02/firebird-21-list-function.html
http://www.firebirdsql.org/refdocs/langrefupd20-select.html#langrefupd20-aggregates
http://www.firebirdsql.org/file/documentation/reference_manuals/user_manuals/html/migration-mssql-syntax.html
http://www.firebirdsql.org/manual/nullguide-aggrfunc.html

lunes, 9 de julio de 2012

Concatenar Cadenas en Firebird e Interbase

Hace unos días estuve buscando información de como concatenar en Firebird, la forma de hacerlo es utilizando los caracteres ||,  les dejo aquí un ejemplo:


select  nombre||'  '||apellidos, domicilio
from personas

Con lo anterior el sistema debe concatenar el nombre con un espacio en blanco y luego los apellidos, en otra columna aparecerá el domicilio.

Espero sea de utilidad !