cancel
Showing results for 
Search instead for 
Did you mean: 

Ayuda con Query

armandomuozsule
Active Participant
0 Kudos

Buena tarde estoy tratando de reparar un query en una guia de carga, en la guia me muestra que el repartidor debe llevar 47 facturas que es correcto,

pero en el detalle donde muestra el numero de factura,localidad,nombre ,direccion del cliente  me salen 55 ya detecte que es porque se repiten algunas ya intente tratar de implementar el distinct pero me siguen saliendo las mismas 55 facturas, si alguien me pudiera ayudar detectando el problemita le agradeceria mucho.

saludos cordiales

select * from(

select Distinct T0.DocEntry NumGuia

      ,U_facnum+case when T6.SeriesName='f1' then 'F' else T6.SeriesName end as serie

      ,T3.slpName

      ,t7.county municipio

      ,t1.cardcode

      ,t1.cardnamE

      ,upper(substring(t7.street,1,1))+lower(substring(t7.street,2,len(t7.street)-1)) direccion

,T0.U_FechaPicking

,T0.U_Ruta

,T0.U_DescRuta

,(select Name from [@vehiculos] where code = T0.U_Vehiculo) Vehiculo

,(select Name from [@pilotos] where code = T0.U_Piloto) Piloto

,(select Name from [@ayudante] where code = T0.U_Ayudante) Ayudante

,(select Name from [@chequeador] where code = T0.U_Chequeador) Chequeador

,(select Name from [@auxiliaresbod] where code = T0.U_Auxiliar1) Auxiliar1

,(select Name from [@auxiliaresbod] where code = T0.U_Auxiliar2) Auxiliar2

,(select Name from [@auxiliaresbod] where code = T0.U_Auxiliar3) Auxiliar3

,(select Name from [@auxiliaresbod] where code = T0.U_Auxiliar4) Auxiliar4

,(SELECT   u_facnum + ','

               FROM oinv

              where docStatus='O'

                 and SlpCode = T1.SlpCode

                 and oinv.docDate between '20140502' AND  '20140502'

                 and oinv.docDate >= T0.U_FechaPicking

                

             order by u_facnum

            

               FOR XML PATH(''))  facturas    

  from [@PICKINGENC] T0 INNER JOIN OINV T1 ON T0.U_Ruta = T1.SlpCode

             INNER JOIN OSLP T3 ON T3.SlpCode = T1.SlpCode

             INNER JOIN NNM1 T6 ON T1.Series = T6.Series

             LEFT OUTER JOIN CRD1 T7 ON T1.CardCode = T7.CardCode

             LEFT OUTER JOIN ocst t5 on t7.state= t5.code and t7.country = t5.country

             LEFT OUTER JOIN ocrd T8 ON T8.CardCode = T7.CardCode

where T1.DocStatus = 'O'       

   and U_facnum is not null

   and charindex('32',slpName)>0

   and T1.docDate between '20140502' AND  '20140502'

   and  T0.U_FechaPicking between '20140502' AND  '20140502'

   and T1.docDate >= T0.U_FechaPicking

)a

group by NumGuia, serie, SlpName, municipio, CardCode, CardName, direccion, U_FechaPicking, U_Ruta, U_DescRuta, Vehiculo, Piloto, Ayudante, Chequeador, Auxiliar1, Auxiliar2, Auxiliar3, Auxiliar4, facturas

order by 4

facturas de la guia

Accepted Solutions (0)

Answers (1)

Answers (1)

Former Member
0 Kudos

Armando,

Viendo tu query, lo más seguro el problema está originado por como haces el JOIN a la tabla CRD1. Esta va tener una fila de registros de CardCode por cada dirección que tenga el cliente. Te recomiendo usar la tabla INV12 en lugar de CRD1 así:

INNER JOIN INV12 T7 ON T1.DocEntry = T7.DocEntry

y buscas luego los campos de dirección que usas en tu query basados en el tipo de dirección:

los que terminan con B para los de dirección de factura o con S para los que son de lugar de entrega.

O si necesitas forzosamente usar CRD1 por algo en especial, entonces amplia el JOIN a esa tabla para unir también el código de dirección del socio de negocio así:

-- Para domicilio de factura

LEFT OUTER JOIN CRD1 T7 ON T1.CardCode = T7.CardCode and T1.PayToCode = T7.Address


-- Para domicilio de entrega

LEFT OUTER JOIN CRD1 T7 ON T1.CardCode = T7.CardCode and T1.ShipToCode = T7.Address


Espero te sirva cualquier de estas 2 soluciones.

Saludos,

Juan Carlos.