on 05-07-2014 10:20 PM
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
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.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
98 | |
11 | |
11 | |
6 | |
6 | |
4 | |
4 | |
3 | |
3 | |
3 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.