Ayuda SAP

Query duplica lineas de actividades

Hola Amigos.

Tengo este Query y es el que necesito para la gerencia, pero me esta duplicando muchas líneas la misma actividad, sabrán porque será??

SELECT T1."DocNum" AS "Doc Preliminar", T1."ClgCode", T1."CntctSbjct", T4."Name", T1."BeginTime" AS "H.Inicio", T1."Recontact" AS "FInicio", T1."ENDTime" AS "H.Final", T1."endDate" AS "FFinal", T1."Duration" AS "Duracion", T1."AssignedBy"AS "Asignado", T2."U_NAME" AS "Usuario", T1."CntctType" AS "Clase", T0."Name", T1."Action", T1."CardCode", T3."CardName",  T1."Notes", T6."U_NAME" 
FROM OCLT T0  
INNER JOIN OCLG T1 ON T0."Code" = T1."CntctType" 
INNER JOIN OUSR T2 ON T1."AttendUser" = T2."USERID" 
INNER JOIN OCRD T3 ON T1."CardCode" = T3."CardCode" 
INNER JOIN OCLS T4 ON T1."CntctSbjct" = T4."Code" 
INNER JOIN OINV T5 ON T3."CardCode" = T5."CardCode" 
INNER JOIN OUSR T6 ON T5."UserSign" = T6."USERID" 
WHERE T1."CntctType" in('14') 
ORDER BY T1."CntctType"

¡Hola Ulises!

El problema que veo es que tienes un INNER JOIN a la OINV, ligando solo el CardCode de la OCRD que a su vez se liga a la OCLG. Creo que si en la actividad se tiene referenciado el documento de la OINV, esa relación tiene que cambiar a como la tienes actualmente.

También veo que tienes la OUSR, asumo que para determinar el usuario que generó el documento.

Saludos!

1 me gusta

Correcto acá el punto es que me muestra lo que quiero pero me esta duplicando las líneas

Puedes hacer la prueba, agrega T5.DocNum te va a traer diferentes Números de Facturas, por lo que yo veo conveniente que cambies la relación a:
INNER JOIN OINV T5 ON T1.DocEntry = T5.DocEntry

De esta manera al tener la factura enlazada en la actividad, solo revisará 1 registro y no todas las facturas en donde el cliente sea el mismo al de la actividad.

Puedes usar la instruccion DISTINCT y cambiar el desplegado del campo T1.NOTES para que no te mande error de tipo de dato en ese campo al usar DISTINCT.

SELECT  DISTINCT T1."DocNum" AS "Doc Preliminar", T1."ClgCode", T1."CntctSbjct", T4."Name", T1."BeginTime" AS "H.Inicio", T1."Recontact" AS "FInicio", T1."ENDTime" AS "H.Final", T1."endDate" AS "FFinal", T1."Duration" AS "Duracion", T1."AssignedBy"AS "Asignado", T2."U_NAME" AS "Usuario", T1."CntctType" AS "Clase", T0."Name", T1."Action", T1."CardCode", T3."CardName",SUBSTRING(T1."Notes",1,100),  T6."U_NAME"

Gracias por la respuesta Furilo pero me muestra el siguiente error

SELECT DISTINCT T1.“DocNum” AS “Doc Preliminar”, T1.“ClgCode”, T1.“CntctSbjct”, T4.“Name”, T1.“BeginTime” AS “H.Inicio”, T1.“Recontact” AS “FInicio”, T1.“ENDTime” AS “H.Final”, T1.“endDate” AS “FFinal”, T1.“Duration” AS “Duracion”, T1."AssignedBy"AS “Asignado”, T2.“U_NAME” AS “Usuario”, T1.“CntctType” AS “Clase”, T0.“Name”, T1.“Action”, T1.“CardCode”, T3.“CardName”,SUBSTRING(T1.“Notes”,1,100), T6.“U_NAME”

INNER JOIN OCLG T1 ON T0."Code" = T1."CntctType" 
INNER JOIN OUSR T2 ON T1."AttendUser" = T2."USERID" 
INNER JOIN OCRD T3 ON T1."CardCode" = T3."CardCode" 
INNER JOIN OCLS T4 ON T1."CntctSbjct" = T4."Code" 
INNER JOIN OINV T5 ON T3."CardCode" = T5."CardCode" 
INNER JOIN OUSR T6 ON T5."UserSign" = T6."USERID" 
WHERE T1."CntctType" in('14') 
ORDER BY T1."CntctType"

Hola Luis.

Yo corrí la consulta y no me marco error, ¿Qué esta mal entonces?, ¿alguien se fijo en las comillas que están ocupando?

te dejo la consulta corregida con las comillas correctas.

Saludos.

SELECT Distinct T1."DocNum" AS "Doc Preliminar", T1."ClgCode", T1."CntctSbjct", T4."Name", T1."BeginTime" AS "H.Inicio", T1."Recontact" AS "FInicio", T1."ENDTime" AS "H.Final", T1."endDate" AS "FFinal", T1."Duration" AS "Duracion", T1."AssignedBy"AS "Asignado", T2."U_NAME" AS "Usuario", T1."CntctType" AS "Clase", T0."Name", T1."Action", T1."CardCode", T3."CardName",SUBSTRING(T1."Notes",1,100), T6."U_NAME"
FROM "OCLT" T0 
INNER JOIN OCLG T1 ON T0."Code" = T1."CntctType" 
INNER JOIN OUSR T2 ON T1."AttendUser" = T2."USERID" 
INNER JOIN OCRD T3 ON T1."CardCode" = T3."CardCode" 
INNER JOIN OCLS T4 ON T1."CntctSbjct" = T4."Code" 
INNER JOIN OINV T5 ON T3."CardCode" = T5."CardCode" 
INNER JOIN OUSR T6 ON T5."UserSign" = T6."USERID" 
WHERE T1."CntctType" in('14') 
ORDER BY T1."CntctType"
1 me gusta

Gracias Jose efectivamente asi es y es por comillas sin embargo mira la imagen que te adjunto:

Repite muchas veces la misma Linea ese es el punto. Y no me esta dejando solo una.

Al igual que en otras consultas que has puesto en este foro, no debes estar relacionando bien las tablas.
Además tienes abiertos 2 temas con el mismo problema.

Unas recomendaciones:

1.- Debes empezar la consulta por la parte sencilla con 2 o 3 tablas y visualizando sus resultados, fijandote o anotando el número total de registros.

2.- Cuando añades una tabla nueva (primero estudia porque campos y de que forma tienes que hacer la JOIN), observa su comportamiento en el número total de registros.

3.- Estas haciendo JOIN a la tabla OUSR 2 veces.

4.- Para poder ayudarte de manera efectiva, en la consulta que nos compartas, elimina tus campos de usuario y algún where peculiar, para que quien pueda ayudarte le resulte sencillo poder ejecutarla y no resulte un trabajo tedioso y largo, porque nuestro juego de datos no tiene los tuyos para poder verificar correctamente la sql.

De hecho hasta este punto está bien.

SELECT T0.[DocNum], T0.[ClgCode], T0.[CntctSbjct], T4.[Name], T0.[BeginTime], T0.[Recontact], T0.[ENDTime], T0.[endDate], T0.[Duration], T0.[AssignedBy], T2.[U_NAME], T0.[CntctType], T1.[Name], T0.[Action], T0.[CardCode], T3.[CardName], T0.[Notes] FROM [dbo].[OCLG]  T0 INNER JOIN [dbo].[OCLT]  T1 ON T0.CntctType = T1.Code INNER JOIN [dbo].[OUSR]  T2 ON T0.AssignedBy = T2.USERID INNER JOIN [dbo].[OCRD]  T3 ON T0.CardCode = T3.CardCode left JOIN [dbo].[OCLS]  T4 ON T0.CntctSbjct = T4.Code WHERE T0.[CntctType]  in ('14') ORDER BY T0.[CntctType]

tu tabla principal debería ser OCLG no OCLT

Cuando insertas la relación con OINV vienen tus problemas.
Haces la JOIN por el CardCode pero el CardCode de OCRD.

No puede ser.

Tienes que analizar el campo que vincula la actividad con la factura.

Eso te lo dejo para que te esfuerces un poco más y te sirva de aprendizaje.
¿ok?