scripts - Problema de Oracle con SQL de informes
scripts oracle ejemplos (1)
Tienes dos filas en Y
para los mismos pares de client_num
location_code
y de client_num
que te estás uniendo. Entonces, la unión duplica los resultados y, por lo tanto, duplica los totales.
Supongo que tendrá que coincidir en uno de los valores de las fechas de alguna manera.
EDITAR: Para abordar su pregunta en comentarios, puede intentar cambiar FROM Y
a lo siguiente:
FROM (SELECT DISTINCT CLIENT_NUM, LOCATION_CODE FROM Y) as Y
Tengo un informe SQL en Oracle que está usando la función SUM
.
Tabla Y
CLIENT_NUM LOCATION_CODE EFFECTIVE_DATE EXPIRY_DATE
1234 AB01 1/1/2011 6/30/2014
1234 AB01 7/1/2014 8/31/2014
1234 AB01 9/1/2014 6/30/2015
1234 AB66 1/1/2011 6/30/2014
1234 AB66 7/1/2014 8/31/2014
1234 AB66 9/1/2014 6/30/2015
Tabla X
CLIENT_NUM LOCATION_CODE EMPLOYEE_COUNT TOTAL_HOURS_WORKED REPORTING_YEAR
1234 AB01 600 12000 2014
1234 AB66 50 11000 2014
SQL:
SELECT SUM(x.EMPLOYEE_COUNT)
OVER (PARTITION BY CASE '':input_parm:''
WHEN ''LOCATION'' THEN y.LOCATION_CODE || '' '' || y.LOCATION_NAME
WHEN ''CLIENT'' THEN y.CLIENT_NUM|| '' '' ||z.CLIENT_NAME
END
) AS EMPLOYEE_COUNT
, SUM(x.TOTAL_HOURS_WORKED)
OVER (PARTITION BY CASE '':input_parm:''
WHEN ''LOCATION'' THEN y.LOCATION_CODE || '' '' || y.LOCATION_NAME
WHEN ''CLIENT'' THEN y.CLIENT_NUM|| '' '' ||z.CLIENT_NAME
END
) AS TOTAL_HOURS_WORKED
FROM Y
LEFT OUTER JOIN X
ON Y.CLIENT_NUM = X.CLIENT_NUM
AND Y.LOCATION_CODE = X.LOCATION_CODE
AND X.REPORTING_YEAR = ''2014''
AND location.EFFECTIVE_DATE BETWEEN TO_DATE(''01-JAN-:in_reporting_year:'',''DD-MON-YYYY'')
AND TO_DATE(''31-DEC-:in_reporting_year:'',''DD-MON-YYYY'')
WHERE Y.CLIENT_NUM=''1234''
AND (Y.LOCATION_CODE=''AB66'' OR Y.LOCATION_CODE=''AB01'')
Esto es duplicar los números y devolver lo siguiente al pasar " CLIENT
" o " LOCATION
" para :input_parm:
y 2014
para :in_reporting_year:
EMPLOYEE_COUNT TOTAL_HOURS_WORKED
1300 46000
1300 46000
Este es el resultado esperado:
EMPLOYEE_COUNT TOTAL_HOURS_WORKED
650 23000
650 23000
¿Cómo puedo filtrar aún más la unión para que coincida con una sola?