 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
jotny Master


Registrado: 17 Feb 2004Mensajes: 226Ubicación: santiago
|
Publicado: Sab 28 Ene, 2006 11:03 pm Asunto: Consultas concatenadas |
|
|
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 |
|
 |
Buildero Master


Registrado: 23 Dic 2003Mensajes: 523Ubicación: Puebla, México
|
Publicado: Dom 29 Ene, 2006 8:16 pm Asunto: |
|
|
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 |
|
 |
+ + Asterix + + Cdt

Registrado: 20 Oct 2005Mensajes: 16
|
Publicado: Dom 29 Ene, 2006 10:22 pm Asunto: |
|
|
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 |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|