Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Concatenar y Group By (https://www.clubdelphi.com/foros/showthread.php?t=25451)

remy 22-09-2005 19:14:16

Concatenar y Group By
 
Hola amigos:

Tengo un problemilla, USO FIREBIRD 1.5. Tengo esta base de datos

FECHA NOMBRE
12/09/2005 Remy
12/09/2005 Graciela
13/09/2005 Caterine
14/09/2005 Yamila
14/09/2005 Marcos
15/09/2005 Jose

Quiero hacer una consulta que me tire como resultado esto

FECHA NOMBRE
12/09/2005 Remy, Graciela
13/09/2005 Caterine
14/09/2005 Yamila, Marcos
15/09/2005 Jose

Es una agrupacion pero concatenando los valores del nombre. He intentado pero el SUM solo es para numeros, asi que estoy frito :(

Alguna ayuda, se los agradecere..

Atte,

remy

lbuelvas 24-09-2005 01:30:56

Hola campeon, la unica es con un procedimiento almacenado, no entiendo cual es el proposito de tu necesidad pero me tome la tarea de hacer un segmento de codigo para resolverlo. Tendras una dificultad y es que si las longitudes de los nombres en una fecha es mas larga que el campo "nombres" te saldra un error al ejecutarse el procedimiento. No he probado si a la salida pueda haber un campo blob. Alguien puede decirnos si es posible ?.

Código SQL [-]

CREATE TABLE PERSONA (
  ID     INTEGER NOT NULL,
  NOMBRE VARCHAR(20) NOT NULL,
  FECHA  DATE NOT NULL
);

ALTER TABLE PERSONA ADD CONSTRAINT
PK_PERSONA
PRIMARY KEY (ID);

ALTER PROCEDURE SP_CUMPLEANEROS
RETURNS (
  FECHA_REFERENCIA DATE,
  NOMBRES VARCHAR(1024)
)
AS
  DECLARE VARIABLE NOMBRE_PERSONA VARCHAR(20);
BEGIN
  for select distinct fecha
      from persona
      order by fecha
      into :fecha_referencia
  do begin
    nombres = '';
    for select nombre
        from persona
        where fecha = :fecha_referencia
        order by id
        into :nombre_persona
    do begin
      if (nombres <> '') then
        nombres = nombres || ', ';
      nombres = nombres || nombre_persona;
    end
    suspend;
  end
END;

pepitu 26-09-2005 09:43:05

Una opinión....posiblemente errónea...
 
Hola.
Ante todo decirte que recién empiezo en delphi y en firebird...por lo que es fácil que mis opiniones sean totalmente erróneas.
Ayer estaba leyendo un manual de SQL y recuerdo que se podía hacer lo que comentas. Quizás no en firebird pero.....lo suelto igual.

La forma de hacerlo era con una consulta de combinación (de unión interna) usando SELF JOIN (producto cartesiano de una tabla consigo misma).

Ya digo que posiblemente sea una 'animalada' lo que acabo de decir....pero las intenciones son buenas.


La franja horaria es GMT +2. Ahora son las 22:26:45.

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