Consulta en Access para agrupar filas

Hola necesito un select para poder realizar lo siguiente.
Si tengo una tabla como esta en access
Proveedor Documento
-------------- ----------------
00001 a1
00001 b1
00001 c2
00002 d3
00002 g3
como seria el select para obtener este resultado
Proveedor Documento
-------------- ----------------
00001                     a1,b1,c2
00002                     d3,g3
Muy agredecido por tu tiempo.
Respuesta
1
Así a priori lo que pides parece bastante complicado porque no es sólo un select sino combinar varios registros. ¿Has probado con los informes o lo quieres en una tabla?
Intentaré ver si se me ocurre algo pero lo veo difícil.
Bueno lo que c me ocurrió, fue crear un campo en la cabecera, y el detalle lo concateno y lo guardo ahí, de manera que no tengo que hacer ningún select extraño. Gracias de todos modos.

2 respuestas más de otros expertos

Respuesta
1
Lógicamente que con un Select no podrás, ya que estas trando de "Mezclar Los Registro", ¿no entiendo porque quieres acer eso?- Para mi es una barbaridad -
* Ahora si esta obligado a acerlo, ya que no hayas otra salida, es porque no consolidaste bien la estructura de tus tablas por eso se te presenta esto.
*****************************************************************

Pero bueno como siempre digo no hay nada imposible, es demasiado esto que te diré pero en fin, conste que esto que te diré te consumirá enormemente los recursos del Servidor.
============================================================
Puede acer un cursor que te recorra la Primera tabla, mientras va insertando pero a la vez concatenando el segundo campo,
Te paso una sintaxis del Cursor
Declare
Nombre-cursor
FOR
Especificación-consulta
[ORDER BY]
Por ejemplo:
Declare
Mi_Cursor
FOR
SELECT num_emp, nombre, puesto, salario
FROM empleados
WHERE num_dept = 'informatica'
Este comando es meramente declarativo, simplemente especifica las filas y columnas que se van a recuperar. La consulta se ejecuta cuando se abre o se activa el cursor. La cláusula [ORDER BY] es opcional y especifica una ordenación para las filas del cursor; si no se especifica, la ordenación de las filas es definida el gestor de SGBD.
Para abrir o activar un cursor se utiliza el comando OPEN del SQL, la sintaxis en la siguiente:
OPEN
Nombre-cursor
[USING lista-variables]
Al abrir el cursor se evalúa la consulta que aparece en su definición, utilizando los valores actuales de cualquier parámetro referenciado en la consulta, para producir una colección de filas. El puntero se posiciona delante de la primera fila de datos (registro actual), esta sentencia no recupera ninguna fila.
Una vez abierto el cursos se utiliza la cláusula FETCH para recuperar las filas del cursor, la sintaxis es la siguiente:
FETCH
Nombre-cursor
INTO
Lista-variables
Lista - variables son las variables que van a contener los datos recuperados de la fila del cursor, en la definición deben ir separadas por comas. En la lista de variables se deben definir tantas variables como columnas tenga la fila a recuperar.
Para cerrar un cursor se utiliza el comando CLOSE, este comando hace desaparecer el puntero sobre el registro actual. La sintaxis es:
Close
Nombre-cursor
Por último, y para eliminar el cursor se utiliza el comando DROP CURSOR. Su sintaxis es la siguiente:
Drop cursor
Nombre-cursor
***********************************************
Recorrer un cursor guardando los valores en variables

USE pubs
GO
DECLARE @au_lname varchar(40)
DECLARE @au_fname varchar(20)
DECLARE authors_cursor CURSOR FOR
SELECTau_lname, au_fname
FROM authors
WHERE au_lname LIKE "B%"
ORDER BY au_lname, au_fname
OPEN authors_cursor
FETCH NEXT FROM authors_cursor INTO @au_lname, @au_fname
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT "Author: " + @au_fname + " " + @au_lname
FETCH NEXT FROM authors_cursor
INTO @au_lname, @au_fname
END
CLOSE authors_cursor
DEALLOCATE authors_cursor
[size= small; font-family: Times New Roman]Yo se hacer eso con sql, pero con access se puede????[/size]
Puedes finalizar la pregunta.
Bueno lo que c me ocurrió, fue crear un campo en la cabecera, y el detalle lo concateno y lo guardo ahí, de manera que no tengo que hacer ningún select extraño. Gracias de todos modos.
Respuesta
1
A mi se me ocurre hacerlo con un do while, es decir, algo así
i=1
Do While i<= 100
i_formato=Format(i,"00000")
sql= "Select * From Tabla Where Proveedor Like ' " & i_formato & " ' "
 Set rstRegistros= New Adodb.Recordset
rstRegistros.Open sql, AdopenKeySet,adLockOptimitic
concatenoregistros= "i_formato : "
    Do while Not rstRegistro.Eof= True
           concatenoregistros= concatenoregistros+", "+rstRegistros!Documento
    loop
msgbox concatenoregistro
i=i+1
rstRegistro.Movenext
loop
esa es mi idea. hice una pequeña prueba con otros datos y segun eso es lo que dices.
Suerte y no dudes en consultar.
Con un do while es sencillo pero tendría que hacer una tabla temporal, para lo que necesito, no es lo que quería pero igual gracias.
Solo un favor, podrías finalizarla.
Cual quier idea es buena, y espero te haya servido.
Bueno lo que c me ocurrió, fue crear un campo en la cabecera, y el detalle lo concateno y lo guardo ahí, de manera que no tengo que hacer ningún select extraño. Gracias de todos modos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas