Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-09-2005
remy remy is offline
Registrado
 
Registrado: sep 2005
Posts: 1
Poder: 0
remy Va por buen camino
Unhappy 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
Responder Con Cita
  #2  
Antiguo 24-09-2005
lbuelvas lbuelvas is offline
Miembro
 
Registrado: may 2003
Ubicación: Colombia
Posts: 377
Poder: 21
lbuelvas Va por buen camino
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;
__________________
Luis Fernando Buelvas T.
Responder Con Cita
  #3  
Antiguo 26-09-2005
pepitu pepitu is offline
Miembro
 
Registrado: sep 2005
Posts: 25
Poder: 0
pepitu Va por buen camino
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.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 12:59:42.


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
Copyright 1996-2007 Club Delphi