Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

SubConsulta que me retorne mas de un registro

Estas en el tema de SubConsulta que me retorne mas de un registro en el foro de SQL Server en Foros del Web. hola, tengo un pequeño gran problema y es que necesito hacer una consulta que me muestre el detalle de las ventas ya que sobre cada ...
  #1 (permalink)  
Antiguo 20/10/2010, 23:02
 
Fecha de Ingreso: marzo-2007
Mensajes: 76
Antigüedad: 17 años, 8 meses
Puntos: 0
SubConsulta que me retorne mas de un registro

hola, tengo un pequeño gran problema y es que necesito hacer una consulta que me muestre el detalle de las ventas ya que sobre cada linea se calculara una comision para los vendedores, hasta este punto no hay problema, el problema que tengo es cuando tengo que sacar tambien el restivo pago de cada factura ya que a veces una misma factura tiene mas de un pago por lo que me duplica o triplica los registros esto dependiendo de cuantos pagos tenga... intente sacar el detalle del pago por medio de una subconsulta pero el problema es que la subconsulta solo me muestra un registro unico por lo que no me sirve, si alguen tiene alguna idea de como se puede hacer esto le agradeceria su ayuda, acontinuacion voy a mostrar la consulta que tengo hasta ahora:

SELECT Personal.CodEmpleado, Personal.NomEmpleado, MaFacturas.NumFactura, MaFacturas.NumDocumento, MaFacturas.FecFactura,
MaFacturas.CodCliente, AsignaComision.CodClase, DeFacturas.CodArticulo, DeFacturas.Cantidad, DeFacturas.Unidades, MaFacturas.CodVendedor,
AsignaComision.NomEmpleado AS Expr1, AsignaComision.CodEmpleado AS Expr2, Articulos.CodArticulo AS Expr3, Articulos.CodClase AS Expr4,
Articulos.DesArticulo, AsignaComision.Comiision,

(SELECT top 1 convert(varchar,FecDocumento, 103) + ' '+ convert(varchar,CxCMaDocumP.NumDocumento)

FROM MaFacturas INNER JOIN
CxCMaDocumP ON MaFacturas.NumFactura = CxCMaDocumP.DocAfecta
WHERE DocAfecta IN (95,2299) AND TipoMovimiento='P'
order by FecDocumento desc)



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.NumFactura IN (95,2299)
  #2 (permalink)  
Antiguo 21/10/2010, 09:42
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 19 años, 3 meses
Puntos: 39
Respuesta: SubConsulta que me retorne mas de un registro

Que te sale de esto?
Código SQL:
Ver original
  1. SELECT T.*, CONVERT(VARCHAR,FecDocumento, 103) + ' '+ CONVERT(VARCHAR,D.NumDocumento)
  2. FROM (
  3.     SELECT P.CodEmpleado, P.NomEmpleado, MF.NumFactura, MF.NumDocumento, MF.FecFactura,
  4.     MF.CodCliente, AC.CodClase, DF.CodArticulo, DF.Cantidad, DF.Unidades, MF.CodVendedor,
  5.     AC.NomEmpleado AS Expr1, AC.CodEmpleado AS Expr2, A.CodArticulo AS Expr3, A.CodClase AS Expr4,
  6.     A.DesArticulo, AC.Comiision
  7.     FROM MaFacturas MF
  8.     INNER JOIN DeFacturas DF ON MF.NumFactura = DF.NumFactura
  9.     INNER JOIN Personal P ON MF.CodVendedor = P.CodEmpleado
  10.     INNER JOIN AsignaComision AC ON P.CodEmpleado = AC.CodEmpleado AND DF.CodArticulo = A.CodArticulo
  11.     INNER JOIN Articulos A ON AC.CodClase = A.CodClase
  12.     FULL OUTER JOIN Clases C ON A.CodClase = C.CodClase
  13.     WHERE MF.NumFactura IN (95,2299)
  14. ) T
  15. INNER JOIN CxCMaDocumP D ON T.NumFactura = D.DocAfecta
  16. WHERE DocAfecta IN (95,2299) AND TipoMovimiento='P'
  17. ORDER BY FecDocumento DESC
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #3 (permalink)  
Antiguo 22/10/2010, 22:32
 
Fecha de Ingreso: marzo-2007
Mensajes: 76
Antigüedad: 17 años, 8 meses
Puntos: 0
Respuesta: SubConsulta que me retorne mas de un registro

adjunto nuevamente el SQL con algunas modificaciones esto para mostrar lo mas basico y me pueda dat a entender mejor.

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 top 1 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)

Última edición por natsumy; 22/10/2010 a las 22:34 Razón: modificar apariencia
  #4 (permalink)  
Antiguo 22/10/2010, 22:44
 
Fecha de Ingreso: marzo-2007
Mensajes: 76
Antigüedad: 17 años, 8 meses
Puntos: 0
Respuesta: SubConsulta que me retorne mas de un registro

flaviovich
esto es lo que muestra:
Código XML:
Ver original
  1. VENDEDOR    FACTURA FECHA   PRODUCTO    CANT.   PRECIO  % COMISION  INF DEL PAGO
  2. Flor Idilia Vindas  2047    02/08/2008  MD440ICH    1   4425    1   06/09/2008          Pago:   839
  3. Flor Idilia Vindas  2047    02/08/2008  A01-612K    1   3540    1   06/09/2008          Pago:   839
  4. Flor Idilia Vindas  2047    02/08/2008  NJ538   2   797 1   06/09/2008          Pago:   839
  5. Flor Idilia Vindas  2047    02/08/2008  A02-663K    1   3097,34 1   06/09/2008          Pago:   839
  6.  Juan Flores    2315    06/08/2008  00005   1   90000   1   06/09/2008          Pago:   839
  7.  Juan Flores    2315    06/08/2008  L4963   3   1884,17 1   06/09/2008          Pago:   839

todo bien, exepto la ultima columna que debe mostrar la informacion del respectivo pago aunque en realidad solo necesito que me muestre el ultimo pago de cada factura, como se puede ver en la subconsulta meti TOP 1 por que si no me da error ya que se supone que una sobconsulta solo puede retornar un registro unico.

Última edición por natsumy; 22/10/2010 a las 22:51

Etiquetas: mas, registro, retorne, subconsulta
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 10:18.