Consulta anidada
Publicado por Randall Rodriguez (5 intervenciones) el 23/10/2010 20:20:19
Necesito en una consulta ver en detalle de las ventas y calcular la comision para vendedores segun cada familia a la que pertenecen los productos y luedo cuado las facturas son de credito mostrar la informacion de el ultimo pago realizado. con la primera parte no hay problema el problema se da cuando intento sacar la info de los pagos ya que si hago un inner join con la tabla de cuentas por cobrar (ahi se guardan todos los movimientos como, creditos, debitos, pagos, facturas) en tonces si una factura tiene mas de un pago me duplica/triplica los registros del detalle de cada factura por lo que habia intentado sacarlo con una subconsulta pero me encontre con el problema de que una subconsulta solo puede devolver un registro unico acontinuacion voy a mostrar el codigo del sql y luego lo que este muestra.
SELECT Personal.NomEmpleado AS Vendedor, MaFacturas.NumFactura, Convert(varchar,MaFacturas.FecFactura,103) AS Fecha,
MaFacturas.CodCliente, DeFacturas.CodArticulo, DeFacturas.Cantidad, DeFacturas.Precio,
AsignaComision.Comiision AS '% Comision',
(SELECT convert(varchar,FecDocumento, 103) + ' '+ 'Pago: ' +convert(varchar,CxCMaDocumP.NumDocumento)+' Monto: '+convert(varchar,MontoDocumento)
FROM MaFacturas INNER JOIN
CxCMaDocumP ON MaFacturas.NumDocumento = CxCMaDocumP.DocAfecta
WHERE DocAfecta IN (2299,2031) AND TipoMovimiento='P'
order by FecDocumento desc) AS Pago
FROM MaFacturas INNER JOIN
DeFacturas ON MaFacturas.NumFactura = DeFacturas.NumFactura INNER JOIN
Personal ON MaFacturas.CodVendedor = Personal.CodEmpleado FULL OUTER JOIN
Clases INNER JOIN
Articulos ON Clases.CodClase = Articulos.CodClase INNER JOIN
AsignaComision ON Articulos.CodClase = AsignaComision.CodClase ON Personal.CodEmpleado = AsignaComision.CodEmpleado AND
DeFacturas.CodArticulo = Articulos.CodArticulo
WHERE MaFacturas.NumDocumento IN (2299,2031)
Vendedor Factura FecFactura Cod Cant. precio % Comision Info del pago
Flor Idilia Vindas 2047 02/08/2008 MD440ICH 1 4425 1 06/09/2008 Pago: 839 Monto: 4302
Flor Idilia Vindas 2047 02/08/2008 A01-612K 1 3540 1 06/09/2008 Pago: 839 Monto: 4302
Flor Idilia Vindas 2047 02/08/2008 NJ538 2 797 1 06/09/2008 Pago: 839 Monto: 4302
Flor Idilia Vindas 2047 02/08/2008 A02-663K 1 3097,34 1 06/09/2008 Pago: 839 Monto: 4302
Juan Flores 2315 06/08/2008 0005 1 90000 1 06/09/2008 Pago: 839 Monto: 4302
Juan Flores 2315 06/08/2008 L4963 3 1884,17 1 06/09/2008 Pago: 839 Monto: 4302
como se puede ver la informacion del pago (Pago: 839 Monto: 4302) se repite para todos las facturas en este caso solo son dos facturas pero unque sean mas simpre va aprecer la misma info del pago lo que no puedo hacer es que aparesca para cada factura la informacion del pago respectivo, si alguien tiene alguna idea de como se pueda hacer le agrecere su ayuda,
SELECT Personal.NomEmpleado AS Vendedor, MaFacturas.NumFactura, Convert(varchar,MaFacturas.FecFactura,103) AS Fecha,
MaFacturas.CodCliente, DeFacturas.CodArticulo, DeFacturas.Cantidad, DeFacturas.Precio,
AsignaComision.Comiision AS '% Comision',
(SELECT convert(varchar,FecDocumento, 103) + ' '+ 'Pago: ' +convert(varchar,CxCMaDocumP.NumDocumento)+' Monto: '+convert(varchar,MontoDocumento)
FROM MaFacturas INNER JOIN
CxCMaDocumP ON MaFacturas.NumDocumento = CxCMaDocumP.DocAfecta
WHERE DocAfecta IN (2299,2031) AND TipoMovimiento='P'
order by FecDocumento desc) AS Pago
FROM MaFacturas INNER JOIN
DeFacturas ON MaFacturas.NumFactura = DeFacturas.NumFactura INNER JOIN
Personal ON MaFacturas.CodVendedor = Personal.CodEmpleado FULL OUTER JOIN
Clases INNER JOIN
Articulos ON Clases.CodClase = Articulos.CodClase INNER JOIN
AsignaComision ON Articulos.CodClase = AsignaComision.CodClase ON Personal.CodEmpleado = AsignaComision.CodEmpleado AND
DeFacturas.CodArticulo = Articulos.CodArticulo
WHERE MaFacturas.NumDocumento IN (2299,2031)
Vendedor Factura FecFactura Cod Cant. precio % Comision Info del pago
Flor Idilia Vindas 2047 02/08/2008 MD440ICH 1 4425 1 06/09/2008 Pago: 839 Monto: 4302
Flor Idilia Vindas 2047 02/08/2008 A01-612K 1 3540 1 06/09/2008 Pago: 839 Monto: 4302
Flor Idilia Vindas 2047 02/08/2008 NJ538 2 797 1 06/09/2008 Pago: 839 Monto: 4302
Flor Idilia Vindas 2047 02/08/2008 A02-663K 1 3097,34 1 06/09/2008 Pago: 839 Monto: 4302
Juan Flores 2315 06/08/2008 0005 1 90000 1 06/09/2008 Pago: 839 Monto: 4302
Juan Flores 2315 06/08/2008 L4963 3 1884,17 1 06/09/2008 Pago: 839 Monto: 4302
como se puede ver la informacion del pago (Pago: 839 Monto: 4302) se repite para todos las facturas en este caso solo son dos facturas pero unque sean mas simpre va aprecer la misma info del pago lo que no puedo hacer es que aparesca para cada factura la informacion del pago respectivo, si alguien tiene alguna idea de como se pueda hacer le agrecere su ayuda,
Valora esta pregunta
0