Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Consultas concatenadas

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Bases de Datos
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Consultas concatenadas Responder citando

Hola estimados, me preguntaba lo siguiente.

Es posible concatenar resultados de una o mas consultas?
por ejemplo.
Consulta1:
Select rut as RUT, nombre_completo [NOMBRE COMPLETO] from usuario where condicion
Consulta2
Select fecha,horas_trabajadas from dias_trabajados

se asume que consulta 1 y 2 con coherentes, es decir que cada usuario tiene uno o mas dias trabajados.
se podrá mostrar un resultado de la siguiente forma?

135323 , JUAN PEREZ , 01-01-2006, 10hrs, 02-01-2006, 7hrs
145456 , PEDRO PEREZ, 01-01-2006, 10hrs, 02-01-2006, 7hrs, 05-01-2006, 8hrs

concatener a la derecha resultados?..... union all lo hace para abajo, pero existe el otro modo?

Si no existe, que le hacemos, pero no pierdo nada con preguntar.
Gracias a todos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Que tal, que yo sepa no.

Para empezar me imagino que existe una relación entre la tabla "usuario" y "dias_trabajados", para el ejemplo, supondré que en ambas tablas utilizas el campo id_usuario para realizar esta relación.

Por lo que tu consulta sería de la siguiente forma:

Código:

SELECT
    usuario.rut as RUT,
    usuario.nombre_completo as Nombre,
    dias_trabajados.fecha,
    dias_trabajados.horas_trabajadas 
FROM
    usuario INNER JOIN dias_trabajados
    ON ( usuario.id_usuario = dias_trabajados.id_usuario )
WHERE
   CONDICIONES ADICIONALES


El reslutado de esta consulta seria algo asi.
Código:

135323  JUAN PEREZ     01-01-2006   10hrs
135323  JUAN PEREZ     02-01-2006   7hrs
145456  PEDRO PEREZ  01-01-2006   10hrs
145456  PEDRO PEREZ  02-01-2006   7hrs
145456  PEDRO PEREZ  05-01-2006   8hrs


Bueno, en terminos teóricos, esto es lo más común, pero en realidad, no sea cual sea tu necesidad de obtener los resultados de la forma en la que lo expresas.

Saludos.
_________________
Quien hace una pregunta teme parecer un ignorante durante cinco minutos, quien no pregunta se mantiene ignorante toda la vida.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

mira ami se me ocurre de esta forma ( yo utilizo MYSQL), utilizando un TStringGrid, 2 TQuerys uno para cada tabla empleado y horas_trabajadas utilizandolos de los componentes BDE, 2 DataSource para los TQuerys, heber si hize lo q tu quieres.

puedes poner el siguiente codigo en en evento ONSHOW del TForm
o en en el evento ONCLICK de un TButton:
TOMANDO EN CUENTA Q HIZE LAS MISMAS TALBAS Q TU "empleado" y "horas_trabajadas" Y SUS CAMPOS SON:
EMPLEADO (RUT,NOMBRE) Y horas_trabajadas (ID_EMPLEADO,FECHA, HRS_TRABAJADAS)

StringGrid1->ColCount = 2; //2 columnas
StringGrid1->RowCount = 2;//renglones 2

for( int i = 1; i < StringGrid1->RowCount; i++ ) //limpiamos las celdas
{
StringGrid1->Cells[i][1] = "";
StringGrid1->Cells[i][2] = "";
StringGrid1->Cells[i][3] = "";
}

Query1->SQL->Text = "SELECT * FROM EMPLEADO "; //SELECCIONAMOS * FROM EMPLEADO
Query1->Open();//ABRIMOS LA CONSULTA

StringGrid1->Cells[0][0] = "Rut"; //PONEMOS EN LAS CELDAS PRIMERAS RUT Y NOMBRE
StringGrid1->Cells[1][0] = "Nombre";

int i = 1, j = 2, k = 2;
while(!Query1->Eof)//SI HAY EMPLEADOS
{ //ASIGNAMOS EL PRIMER EMPLEADO Y SU RUT A LAS CELDAS
StringGrid1->Cells[0][i] = Query1->Fields->Fields[0]->AsString;//RUT
StringGrid1->Cells[1][i] = Query1->Fields->Fields[1]->AsString;//NOMBRE
//SELELCCIONAMOS LAS HORAS TRABAJADAS DEL PRIMER EMPLEADO
Query2->SQL->Text = "SELECT FECHA, HRS_TRABAJADAS FROM horas_trabajadas WHERE ID_EMPLEADO = "+ Query1->Fields->Fields[0]->AsString +" ";
Query2->Open(); //ABRIMOS LA CONSULTA

while( !Query2->Eof )//SI NO ES FIN DE ARCHIVO QUIERE DECIR Q TIENE
{ //MAS HRS TRABAJADAS EL EMPLEADO
if( j > StringGrid1->ColCount-1 )
{
StringGrid1->ColCount++; //Agregamos una columna para fecha
StringGrid1->Cells[ k ][ 0 ] = "Fecha ";
StringGrid1->ColCount++; //Agregamos una columna para horas trabajadas
StringGrid1->Cells[ k + 1 ][ 0 ] = "Hrs Trabajadas ";
k += 2;
}


StringGrid1->Cells[ j ][ i ] = Query2->Fields->Fields[0]->AsString; //fecha
StringGrid1->Cells[ j + 1 ][ i ] = Query2->Fields->Fields[1]->AsString; //horas trabajadas
Query2->Next(); //leemos el siguiente registro

j += 2;
}
Query1->Next();//nos vamos al siguiente registro del empleado

if( !Query1->Eof ) //si no hay fin de archivo
{ //todavia hay mas empleados
StringGrid1->RowCount++; //agregamos un renglon
i++; //para el empleado siguiente
j = 2;
}
}


Bueno espero q te sirva.

ATTE
+ + ObeliX + +

"EL CONOCIMIENTO HUMANO PERTENECE AL MUNDO"
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.