Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   sumar concadenaciones en sql-firebird 2.0 (https://www.clubdelphi.com/foros/showthread.php?t=73694)

ingabraham 10-05-2011 20:00:51

sumar concadenaciones en sql-firebird 2.0
 
Código SQL [-]

select nrofactura, [nombarticulo]|| ' ' ||[cantidad] from detalleventa, facturas
where codfac=codfacdetalle


fact 001 ,( dolex 5, advi 4, mentol 1) <<-- ir como concadenado estos campos
fact 002 ,( aspirina 2, advi 3, algodon 1)
...


osea q me valla como lo que hace la funcion sum

algo como asi

Código SQL [-]

select nrofactura,sum( [nombarticulo]|| ' ' ||[cantidad])articulos_comprados from detalleventa, facturas
where codfac=codfacdetalle

pero no funcionaria por q nomarticulo es string y se necesita es concatenar.

gracias.

gluglu 10-05-2011 20:09:40

Código Delphi [-]
Select nrofactura, nombarticulo || ' ' || cantidad from detalleventa, facturas
where codfac = codfacdetalle

ingabraham 10-05-2011 20:15:48

no es eso, el si hace la contenacion, pero si cada registro detalle tiene varios articulos vendidos que los concadene a todos x factura.

Casimiro Notevi 10-05-2011 22:10:32

O sea, ¿todos los registros en uno sólo?, no se puede hacer, salvo que te crees un procedimiento almacenado y que devuelva un string o algo así.

ingabraham 10-05-2011 22:24:22

exacto., eso es lo q necesito,
como lo haria-

Caral 10-05-2011 23:08:53

Hola
Pero no os parece que la concatenacion es simplemente para mostrar el dato junta a.
No creo que sea eficiente o se pueda sumar un string que contenga un dato numerico.
Me da la impresion (sin probarlo) que seria algo asi:
Código SQL [-]

select nrofactura, [nombarticulo]|| ' ' || sum([cantidad]), articulos_comprados from detalleventa, facturas
where codfac=codfacdetalle
Me parece que hace la concatenacion, pero solo suma el dato catidad, no el nombarticulo que no es numerico.
Saludos
PD: No se si necesita un group by en esto.

Casimiro Notevi 11-05-2011 00:27:58

Es que parece que lo que quiere es unir los datos de varios registros. No se puede con un select, de ninguna manera.
Tendría que hacer un store procedure que haga el select y almacene en una variable el resultado, como una cadena de texto, y finalmente devuelva el valor de esa variable.
Eso es suponiendo que haya entendido bien lo que quiere.

ingabraham 19-05-2011 01:38:02

como lo hago
no tengo ni idea.

store procedure

Casimiro Notevi 19-05-2011 01:48:11

¿No te vale hacerlo desde delphi?

abelg 19-05-2011 17:20:12

Hola, lo primero que tendrías que hacer es un procedimiento como este pero basado en tus tablas.

Código SQL [-]
SET TERM ^ ;

ALTER PROCEDURE FillDetalle(
  ID_FAC INTEGER)
RETURNS (Productos VARCHAR(1000))
AS
DECLARE VARIABLE concatenado VARCHAR(50);
begin
 Productos = '';
 FOR
 SELECT nombreproducto || ' ' || CAST(cantidad as varchar(10))
 FROM DETALLEFACTURA
 WHERE REF_FACTURA = :ID_FAC
 into :concatenado
 DO BEGIN
   Productos = Productos ||', '|| concatenado;

 END
 SUSPEND;
end^

SET TERM ; ^

luego puedes ejecutar nuevamente tu consulta

Código SQL [-]
Select FACT, (Select * From  FILLDETALLE(ID_FACTURA)) as Concatenado
from FACTURA

y listo aqui eso funcionó bien, ahh, en el procedimiento puedes de alguna forma quitarle la primera ',' que esta demas.

salu2

ingabraham 19-05-2011 22:51:19

exacto, distes en el problema
ya con esto kdo solucionado mi foro.
ha y era create en vez de alter

gracias,

como cierro el foro?.

Casimiro Notevi 19-05-2011 22:59:20

Cita:

Empezado por ingabraham (Mensaje 400705)
como cierro el foro?.

No tenemos costumbre de cerrar los hilos por si alguien quiere aportar algo nuevo.
Saludos.


La franja horaria es GMT +2. Ahora son las 17:49:13.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi