Tengo una base de datos con dos tablas. ¿Cómo puedo unir los registros de las dos fuentes?

Hola. Te pregunto algo que tiré al tablón y nadie me supo responder.
Tengo una base con dos tablas. "Nombres" y "Cosas". Las une un id numérico.
ID Nombres Cosas
001 juan tren
002 pedro auto avión
003 maria luis camion
Ahora yo necesito unir en un solo campo los registros de la tabla cosas que se corresponden con un mismo ID. En el ejemplo, necesitaría que auto y avión, pertenecientes al ID 002, pudieran presentarse en un solo campo. Como pertenecen a la tabla "cosas", se trata de dos registros diferentes (no de dos campos).
¿Es eso posible? ¿Cómo?
Muchas gracias.
Fatiga

1 Respuesta

Respuesta
1
Sí!, es posible.
La idea es hacer lo sig:
No es tan fácil y directo pero se puede!
1º)recorrer la tabla de nombres
2º)para cada id de nombre
Contar la cantidad de cosas que hay.
3º)si hay más de 1 cosa para el id del nombre concatenarlas
Ok este caso practico se puede resolver en cualquier lenguaje de programación que hay muchios.
Te lo resuelvo con un pl/sql para que analices la lógica pero lo puedes traducir a cualquier lenguaje de prog. Como te decía.
Haciendo analogía con vb los cursores vienen a ser como un recordset.
el loop viene a ser como un for next.
El close cursor es como el close del recorset.
Cualquier cosa me avisas
Éxitos
Kaos
'preparar recorrido de nombres
declare cursor c_nombres is
select id
from nombres;
'preparar recorrido de cosas
declare cursor c_cosas(ln_id number) is
select nom_cosas
from cosas
where id = ln_id;
begin
'abrir cursor de nombres y recorrer todos los nombres
open cursor c_nombres;
loop
fetch c_nombres into ll_id;
exit when c_nombres%not_found;
'para cada nombre se cuenta cuantas cosas hay!
select count(*)
into li_cant
from cosas
where id = ll_id;
'si hay mas de una cosa para el id del nombre se concatenan todas las cosas
if li_cant > 1 then
'recorro las cosas para este id unicamente
'abro el cursor de cosas exclusiva con este id unicamente
open c_cosas(ll_id);
loop
fetch c_cosas into ls_cosas
exit when c_cosas%not_found;
'las concateno a todas las cosas del id.
ls_st_de_cosas :=ls_st_de_cosas + ls_cosas;
end loop;
close c_cosas;
elsif li_cant =1 then
--hay solo una cosa
select cosa
into ls_st_de_cosas
from cosas
where id = ll_id;
end if;
'insert into una tabla cualquiera de tu resultado
insert into t1(id,nombre_cosas) values (ll_id,ls_st_de_cosas );
end loop
close c_nombres;
end;
Genial! Excelente!. Muchas gracias. Pude seguir con bastante aproximación la lógica de lo que me mandaste. Ahora, soy un usuario bastante primitivo de access y no sabría traducir lo que pusiste en lenguaje sql o en alguno que pudiera incorporar al access. Por eso, veo que se puede hacer lo que necesito, pero si no es mucha molestia te pediría una traducción para access básico.
Muchas gracias por todo.
Me temo que en access no se puede hacer con un simple sql.
Vas a tener que crear una macro con la misma lógica en visual basic.
Éxitos
Kaos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas