SQL Server - Valores nulos.

   
Vista:

Valores nulos.

Publicado por Juan Carlos (12 intervenciones) el 23/07/2009 01:13:50
Hola a todos: Tengo una consulta que puede resultar muy tonta pero necesito su ayuda:

Resulta que tengo que armar un reporte con Crystal en VB.NET, lo hago sobre una tabla que primero lleno con consultas sql: TMP_CLIENTES. No es una tabla temporal. Tiene los campos: ID, NOMBRE, SALDO, ULTIMO_PAGO.

Para llenar dicha tabla creo tablas temporales:
#SALDO (ID, SALDO)
#FECHA (ID, FECHA)

A #FECHA la lleno con:
INSERT INTO #FECHA (ID, FECHA) SELECT ID, MAX(FECHA) FROM CUENTAS GROUP BY ID

(parecido hago con #SALDO)

Y después lleno TMP_CLIENTES:
INSERT INTO CLIENTES (ID, NOMBRE, SALDO, ULTIMO_PAGO)
SELECT ID, NOMBRE, SALDO, FECHA FROM CLIENTE, #SALDO, #FECHA
WHERE CLIENTE.ID = #SALDO.ID AND CLIENTE.ID = #FECHA.ID

El problema es que si el cliente no ha realizado un pago todavía, las temporales no tienen registro para ese cliente y entonces no me aparece el mismo en la consulta final. Tengo entendido que esto lo puedo solucionar con un left join, pero no se como escribirlo con 3 tablas en el from. Me pueden ayudar? Está bien que lo encare así?

La otra opción era poner '01/01/1900' con un update a las temporales con nulo en saldo o fecha pero eso es realmente una mala solución.

Gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias

RE:Valores nulos.

Publicado por Isaias (3180 intervenciones) el 23/07/2009 16:44:22
Deja de utilizar codificacion antigua y utiliza INNER JOIN, por otro lado, si vas a comparar contra un CALENDARIO, deberias crear este y asi, hacer tu left join contra dichas fechas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Valores nulos.

Publicado por Juan Carlos (12 intervenciones) el 23/07/2009 17:56:22
Hola Isaias y los demás:

la consulta me quedó así con LEFT JOIN:

INSERT INTO CLIENTES (ID, NOMBRE, SALDO, ULTIMO_PAGO)
SELECT ID, NOMBRE, SALDO, FECHA FROM
((CLIENTE left join #SALDO on CLIENTE.ID_CLIENTE = #SALDO.ID_CLIENTE)
left join #FECHA on CLIENTE.ID_CLIENTE = #ULTIMO_PAGO.ID_CLIENTE)

Con esto me salen en el listado final todos los clientes, aunque no hayan efectuado pago. Leí por ahí que es más eficiente usar el join que el producto cartesiano total. Es por esto que me lo indicas Isaias?

Por otro lado no entendí lo del calendario.

Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias

RE:Valores nulos.

Publicado por Isaias (3180 intervenciones) el 23/07/2009 19:21:17
Si mira, si tus comparaciones, por ejemplo, hablando de VENTAS, las vas a hacer por dias trascurridos y puede ser que algun dia NO tengas venta y quieras reflejarlo con CEROS, entonces tendrias que CREAR UNA TABLA con los dias calendario y hacer un join contra dicha tabla
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Valores nulos.

Publicado por Juan Carlos (12 intervenciones) el 23/07/2009 20:04:54
Muchas gracias Isaias ahora entiendo tu explicación saludos, me funcionó.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias

RE:Valores nulos.

Publicado por Isaias (3180 intervenciones) el 23/07/2009 23:07:04
Que bien, saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar