SQL Server - Alguien Sabe como puedo hacer esto???

 
Vista:

Alguien Sabe como puedo hacer esto???

Publicado por Liang (1 intervención) el 23/05/2008 03:06:57
Hola.

Bueno... me rendí y ahora no me queda mas que esperar a ke me respondan :)

resulta ke necesito hacer una consulta en SQL un tanto extraña o mas bien yo no se como podría hacerla...

lo dire con palabras y despues un poco de codigo...

quiero ke saque varios campos de una tabla llamada "negocio" luego ke me diga en un campo cuantas cuotas de ese negocio (el negocio ke se saco de la tabla negocio) estan facturadas.... todo eso segun el rut ke yo ingrese...

cada negocio, si es ke genera cuotas... escribe las cuotas de tal modo ke si una cuota es facturada, el campo CuoEstado sera 'S', de lo contrario será 'N'

veamos esto en codigo o como lo estoy haciendo yo y no resulta bien...

SELECT e.NegTipTxs AS 'Código TXS', b.TipTxsDes AS Descripción, e.NegFecRec AS Fecha, e.NegHorRec AS Hora, e.NegLocal AS [Local], e.NegBolNC AS Boleta, e.NegCuotas AS Cuotas, e.NegMonto AS Monto, e.NegValCuo AS 'Valor cuota', COUNT(c.CuoEstado) AS Fact, e.NegCaja AS Caja

FROM NEGOCIO e INNER JOIN
TIPOTXS1 b ON e.NegTipTxs = b.TipTxsCod INNER JOIN
CUOTAS2 c ON e.MacRut = c.MacRut AND e.NegFecRec = c.NegFecRec
WHERE (e.MacRut = '70') AND (b.TipTxsC_A = 'V ') AND (c.MacRut = '70') AND c.CuoEstado = 'S')

GROUP BY e.NegTipTxs, b.TipTxsDes, e.NegFecRec, e.NegHorRec, e.NegLocal, e.NegBolNC, e.NegCuotas, e.NegMonto, e.NegValCuo, c.CuoEstado, e.NegCaja

esa es mi consulta... si se fijan... en el SELECT, cuento con un "Count" cuantos c.cuoestado hay... y en la clausula WHERE... pregunto por los c.cuoestado = 'S'

el problema es ke... ke pasa si hay 1 solo negocio ke no genera cuotas? el c.cuoestado seria = null entonces como esta en un AND no devuelve nada... y deberia devolver 1 negocio con 0 cuotas pagadas y no se como hacerlo.

Gracias de ante mano,

Salu2. Liang =)
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

RE:Alguien Sabe como puedo hacer esto???

Publicado por Isaias (3308 intervenciones) el 23/05/2008 21:15:17
En su WHERE, agregue un filtro que diga: c.cuoestado is not null
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:Alguien Sabe como puedo hacer esto???

Publicado por pacopaz (131 intervenciones) el 29/05/2008 19:59:14
Intenta esto:

SELECT
e.NegTipTxs AS 'Código TXS',
b.TipTxsDes AS Descripción,
e.NegFecRec AS Fecha,
e.NegHorRec AS Hora,
e.NegLocal AS [Local],
e.NegBolNC AS Boleta,
e.NegCuotas AS Cuotas,
e.NegMonto AS Monto,
e.NegValCuo AS 'Valor cuota',
COUNT(c.CuoEstado) AS Fact,
e.NegCaja AS Caja

FROM
(NEGOCIO e INNER JOIN
TIPOTXS1 b ON e.NegTipTxs = b.TipTxsCod) LEFT JOIN
CUOTAS2 c ON e.MacRut = c.MacRut AND
e.NegFecRec = c.NegFecRec AND
c.CuoEstado = 'S'

WHERE (e.MacRut = '70') AND
(b.TipTxsC_A = 'V ') AND
(c.MacRut = '70')

GROUP BY
e.NegTipTxs,
b.TipTxsDes,
e.NegFecRec,
e.NegHorRec,
e.NegLocal,
e.NegBolNC,
e.NegCuotas,
e.NegMonto,
e.NegValCuo,
c.CuoEstado,
e.NegCaja

El Inner Join haría que se presentaran todos los registros que contengan datos tanto en NEGOCIO, como en TIPOTXS1, mientras que el Left buscaría los registros que coincidan con MacRut, NegFecRec, desde las otras tablas, y CouEstado = 'S'. Dado que todo esto tiene que coincidir para desplegar algo, pero no restringe a que sólo sea eso, los registros obtenidos de COUTAS2 se contarán en el count, pero si no trae uno sólo, entonces, no tendrá nada que contar y el valor devuelto será 0.
O por lo menos, eso es en teoría.
Espero que te sirva.

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