Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Ayuda con una consulta (https://www.clubdelphi.com/foros/showthread.php?t=24246)

Nomack 12-08-2005 16:51:28

Ayuda con una consulta
 
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:
Código SQL [-]
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
Código SQL [-]
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

Revisé la consulta
 
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.
Código Delphi [-]
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

Consulta
 
Cita:

Empezado por ContraVeneno
Hago lo siguiente y no me marca ningún error ni en la consulta, ni en el
resultado.
Código Delphi [-]
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
Cita:

< 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:


La franja horaria es GMT +2. Ahora son las 16:29:55.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi