Tuve por varios días un problema que surgió por una comilla simple que SQL Server traducía como caracter especial las cuales venían de un sistema auxiliar de SAP y que cargaba por DTW, esto hacia que no pudiera hacer un Join pues las descripciones eran distintas entre un sistema y otro, como no hallaba la solución a través de alguna función o de forma nativa desde SQL Server para eliminarla y ante mi carga de trabajo que me impedía seguir buscando, decidí darle rienda suelta a mi imaginación y pues aquí les dejo mi solución, si tienen una mejor, no sean malos déjenla en los comentarios.
Utilizando el CHARINDEX y el SUBSTRING creo nuevas descripciones uniformes dentro de una tabla creada a partir de una subconsulta la cual uno con otra subconsulta con las tablas de SAP, para ya sin el caracter especial hacer el match.
select * from (
select NOM_GEN_POL as [Nombre Poliza Sistema Aux], replace(Ref1,'Pól','Pól') as [Nombre Poliza SAP], FECHA_GEN_POL as [Fecha Poliza], [Importe Poliza SAP] , [Importe Poliza Sistema Aux]
from (
select CONVERT(Decimal(15,2),SUM(c.IMPORTE),2) as [Importe Poliza Sistema Aux]
,CASE when b.NOM_GEN_POL like '%PEÑ%' then SUBSTRING(b.NOM_GEN_POL,0, CHARINDEX('PEÑ', b.NOM_GEN_POL) + 2) + SUBSTRING(b.NOM_GEN_POL,CHARINDEX('PEÑ', b.NOM_GEN_POL) + 3, 20) else b.NOM_GEN_POL end as NOM_GEN_POL, b.FECHA_GEN_POL
from Sistema_Aux.dbo.RH_ENC_POL b
inner join Sistema_Aux.dbo.RH_POLIZA_NOMINA a on a.CLA_GEN_POL = b.CLA_GEN_POL
inner join Sistema_Aux.dbo.RH_DET_POL_IND c on a.NUM_NOMINA = c.NUM_NOMINA
and c.TIPO_CAR_CRE = 2
and c.CLA_PERIODO = a.CLA_PERIODO
and b.FECHA_GEN_POL > '20180531'
group by b.NOM_GEN_POL, b.FECHA_GEN_POL) Tabla_Sistema_Aux
left join (
select CONVERT(Decimal(15,2),sum(Loctotal),2) as [Importe Poliza SAP], TransCode
, CASE when Ref1 like '%PEÃ%' then SUBSTRING(isnull(Ref1,''),0, CHARINDEX('PEÃ', isnull(Ref1,'')) +2) + SUBSTRING(isnull(Ref1,''),CHARINDEX('PEÃ', isnull(Ref1,'')) + 4, 20) else Ref1 end as ref1--, RefDate
from OJDT
where TransType = 30 and TransCode in ('NO01','FN01')
and RefDate > '20180531'
group by transcode, Ref1)--, RefDate)
Tabla_SAP On (replace(replace(Tabla_SAP.Ref1,'Pól','Pól'), ' - [', '- [') = replace(Tabla_Sistema_Aux.NOM_GEN_POL COLLATE Modern_Spanish_CS_AS, ' - [', '- [')
)
) Consulta where isnull([Importe Poliza SAP],0) <> isnull([Importe Poliza Sistema Aux],0)
order by [Fecha Poliza]
Nota: mi versión de SQL Server es 2008 R2.
No hay comentarios:
Publicar un comentario