PDA

Ver la Versión Completa : Ayuda con una consulta


Nomack
12-08-2005, 16:51:28
Tengo 3 tablas A B C cada tabla tiene sus respectivas columnas A1 A2... B1 B2.... C1 C2... y obviamente con registros....
La consulta es la siguiente: necesito ver en una tabla la segunda columna de cada tabla es decir A2 B2 C2 pero el numero de registros que necesito ver de cada columna es diferente A2 tiene 20 registros, B2 tiene 15 registros y C2 tiene 25 registros... no se como hacerlo trate de hacer un join pero me repite datos para igualarme el numero de registros... que puedo hacer si necesito esas columnas en un Qreport?
La idea es que como el dato mayor de registros es 25, la columna que tiene 20 me muestre (null) en los ultimos 5 registros, y la que tiene 15, me muestre (null) en los ultimos 10, o no me muestre nada solo casillas en blanco.
Por favor estoy desubicado necesito su ayuda Gracias.

ContraVeneno
12-08-2005, 17:30:50
Se puede hacer lo que tu quieres. Sería buena idea que mencionaras que motor utilizas y cuales son las restricciones para hacer esa consulta (cláusula where) para darte una mejor idea de como se peude hacer.

Uso SQL Server y tengo dos tablas cada una con un campo Folio y un campo Cantidad. Para mostrar la cantidad de las dos tablas, lo que yo hago es lo siguiente:

SELECT T1.Cantidad, T2.Cantidad
FROM Tabla1 T1, Tabla2 T2
WHERE T1.Folio *= T2.Folio


con esto SQL Server me muestra todos los registros de T1 y todos los de T2 y cuando alguno no existe en T2 me muestra un null....
para evitar esto a veces utilizo un case

case when t2.cantidad is null then 'No existe' else T2.Cantidad


Espero que al menos te de alguna idea.
Saludos.

Nomack
17-08-2005, 00:47:08
Contra: ya revise y es valida la consulta, pero delphi me genera error en el query cuando utilizo el (*=) .... pero por el asterisco, si lo quito no me genera error...
que puedo hacer para utilizar este tipo de consulta en delphi?

ContraVeneno
17-08-2005, 16:14:47
Hago lo siguiente y no me marca ningún error ni en la consulta, ni en el
resultado.

with datamod1.sdqQuery1 do begin
SQL.Clear;
SQL.Add('Select ....');
......
SQL.Add('and F.folio*=O.folio');
......
Open;
......
end; //with sdqQuery1


¿Podrías poner el código delphi con el que haces la instrucción y mencionar el mensaje de error que de marca? Tal vez con esa información pueda ayudarte mejor.

Nomack
17-08-2005, 22:09:06
Hago lo siguiente y no me marca ningún error ni en la consulta, ni en el
resultado.

with datamod1.sdqQuery1 do begin
SQL.Clear;
SQL.Add('Select ....');
......
SQL.Add('and F.folio*=O.folio');
......
Open;
......
end; //with sdqQuery1


¿Podrías poner el código delphi con el que haces la instrucción y mencionar el mensaje de error que de marca? Tal vez con esa información pueda ayudarte mejor.No se si estoy cometiendo un error, lo que pasa es que la sentencia SQL la escribo en la propiedad SQL del query (Tstrings), no en el codigo... si es asi, en que parte debo colocarlo? en el evento onclick de un Tbutton?

ContraVeneno
18-08-2005, 16:16:14
Bastante raro, no se porque te marque el error en el asterísco.
De cualquier manera lo que yo hago es colocar el código (mencionado) justo antes de que voy a utilizar la información de la base de datos, aunque el evento dependerá de cuando creas tu que es más conveniente.
Es todo lo que puedo decir.

saludos

edgusano
19-08-2005, 16:59:22
Hola Nomack con respecto al asterisco en la consulta que te dice contraveneno, puedes reemplazarlo por un LEFT JOIN, dado que con el asterisco no es estandar

< old_outer_join >

Especifica una combinación externa con la sintaxis antigua específica del producto y la cláusula WHERE. Se utiliza el operador *= para especificar una combinación externa izquierda y el operador =* para especificar una combinación externa derecha.

Este ejemplo especifica una combinación externa izquierda en que las filas de Tab1 que no cumplen la condición especificada se incluyen en el conjunto de resultados:

SELECT Tab1.name, Tab2.id
FROM Tab1, Tab2
WHERE Tab1.id *=Tab2.id


Nota No se recomienda utilizar esta sintaxis de combinación externa debido a la posibilidad de que la interpretación sea ambigua y porque se trata de una sintaxis no estándar. En su lugar, especifique las combinaciones en la cláusula FROM. Se pueden especificar combinaciones externas mediante operadores de combinación en la cláusula FROM o mediante los operadores no estándar *= y =* en la cláusula WHERE. No se pueden utilizar los dos métodos en la misma instrucción.

vtdeleon
03-09-2005, 21:02:50
Saludos

Lo mismo me esta pasando, tablas Dbase y Foxpro (dbf). Y estos no soportan el JOIN

:(:(:(

vtdeleon
03-09-2005, 21:24:37
Saludos

Descartado mi Post anterior. Si se puede, tenia un error en la sentencia:rolleyes: