[ Foro de SQL (y MySQL) ]

Agregar Registros a una Consulta

17-Nov-2015 23:58
Invitado (Jorge)
5 Respuestas

Estimados

Tengo que agregar campos en una consulta SQL  para un reporte, la situacion es la siguiente, dada la siguiente tabla:

Cliente                  Remito
Emp A                   001
Emp B                   002
Emp C                   005

En caso de saltearse los remitos debo completar la tabla con los numeros faltantes, es decir tengo que agregar a la consulta los remitos 003 y 004 y la tabla debe quedar:

Cliente                  Remito
Emp A                   001
Emp B                   002
x                              003
x                              004
Emp C                   005

Por supuesto todo esto sin escribir en la tabla y dentro de un (SELECT .... FROM ....WHERE....)

Toda ayuda es bienvenida y super agradecida.
Desde ya gracias

Saludos
Jorge


18-Nov-2015 09:37
Nacho Cabanes (+32)

No acabo de entender.

Por una parte, no se trata de dos tablas (tabla CLIENTES y tabla REMITOS) que vayas a cruzar mostrando los campos de una que no aparezcan en la otra, ¿verdad? (eso se haría con un LEFT OUTER JOIN).

Por otra parte, hablas de "Agregar Registros a una Consulta" pero también dices que "todo esto sin escribir en la tabla", o sea, que realmente no debes agregar registros a la tabla.

Entonces, ¿se trata de mostrar en pantalla un bloque de información, parte del cual viene de la tabla y parte del cual se genera al vuelo? Y esa información "nueva" la quieres mostrar desde SQL, no desde ningún otro lenguaje que estés usando para crear el informe. ¿Es así?


18-Nov-2015 15:23
Invitado (Jorge)

Perdon Nacho si no fui muy claro.

La tabla con todos los datos ya la arme por medio de JOINS y supongamos que me queda una tabla con las dos columnas que mencione.

Cuando digo que necesito eso sin escribir en la tabla, queria decir que no quiero modificar las tablas de origen y solo quiero agregar los registros en la tabla virtual (?) que se arma durante la ejecucion del report (la misma que se arma con los JOIN que realice.

Espero haber sido un poco mas claro.

Con estos datos me podes ayudar?

Desde ya mil gracias
Saludos
Jorge


18-Nov-2015 23:02
Nacho Cabanes (+32)

Entonces son dos tablas que vas a unir con un LEFT (OUTER) JOIN o con un RIGHT (OUTER) JOIN, según en qué lado esté la tabla de la que quieras mostrar todos los datos.

Para darte una solución precisa, necesitaría saber los nombres de las tablas y sus campos, pero en principio sería algo como

 
SELECT Clientes.nombre, Remitos.codigo
FROM Clientes
RIGHT JOIN Remitos
ON Clientes.codigo = Remitos.CodigoCliente;
 


 


19-Nov-2015 15:55
Invitado (Jorge)

Perdon Nacho, por no ser claro

Mi problema es que no tengo los datos de remito 003 y 004 y no tengo de donde buscarlos.

Es decir luego de hacer multimples JOINs me quedo con la tabla final que les mencione, luego tengo que ver que si faltan numeros en la tabla agregarlos yo en la consulta.

Lo de la numeracion ya lo resolvi con un contador que inicializo con el menor de los remitos, lo que no se es como agregar campos a la tabla, me falta esa instruccion y como hacerlo.

Mi primer idea era recorrer la tabla comparando con el campo anterior mediante multiples SELECTs y en caso de que faltara un numero entre ambos agregarlo y eso es precisamente lo que no se como se hace.

saludos y nuevamente mil gracias.
Jorge


19-Nov-2015 20:45
Nacho Cabanes (+32)

Es que ni siquiera sé que es eso a lo que llamas "remito".

Para hacer un contador "al vuelo", he visto hacer cosas como:

 
SELECT nombre,
      @rownum := @rownum + 1 AS contador
FROM tabla
CROSS JOIN (SELECT @rownum := 0) r
ORDER BY nombre
 


 






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)