martes, 29 de julio de 2008

Query de Responsabilidad

Esta query/select la suelo usar mucho para calcular los ID de empleado que son responabilidad de un otro ID de empleado o de un ID de Usuario (normalmente un responsable de Unidad Organizativa).

La query en si misma devuelve la lista de Unidades Organizativas de las que es reponsable un manager y todas las que están por debajo jerárquicamente de éstas, mediante el Árbol de Unidades Organizativas definido en el cliente. Para ello se usa una tabla generalmente oculta que se llama M4SCO_WU_TREE (o de forma lógica: SCO_WORK_UNIT_TREE)

Tengo la versión que necesita el STD_ID_HR y STD_OR_HR_PERIOD:

SELECT DISTINCT
M4SCO_WU_TREE2.ID_ORGANIZATION,
M4SCO_WU_TREE2.SCO_ID_WU_CHILD
FROM
M4SCO_H_HR_RESP M4SCO_H_HR_RESP,
M4SCO_WU_TREE M4SCO_WU_TREE,
M4SCO_WU_TREE M4SCO_WU_TREE2
WHERE
M4SCO_H_HR_RESP.SCO_ID_HR = 'XXXXXX' AND
M4SCO_H_HR_RESP.SCO_OR_HR_PERIOD = X AND
M4SCO_H_HR_RESP.SCO_DT_START <= SYSDATE AND
SYSDATE <= M4SCO_H_HR_RESP.SCO_DT_END AND
M4SCO_H_HR_RESP.ID_ORGANIZATION = M4SCO_WU_TREE.ID_ORGANIZATION AND M4SCO_H_HR_RESP.STD_ID_WORK_UNIT = M4SCO_WU_TREE.SCO_ID_WU_CHILD AND M4SCO_WU_TREE.ID_ORGANIZATION = M4SCO_WU_TREE2.ID_ORGANIZATION AND M4SCO_WU_TREE2.SCO_LEFT_VALUE >= M4SCO_WU_TREE.SCO_LEFT_VALUE AND M4SCO_WU_TREE2.SCO_RIGHT_VALUE <= M4SCO_WU_TREE.SCO_RIGHT_VALUE
ORDER BY
M4SCO_WU_TREE2.ID_ORGANIZATION,
M4SCO_WU_TREE2.SCO_ID_WU_CHILD


y tengo la versión que necesita el ID_APP_USER:

SELECT DISTINCT
M4SCO_WU_TREE2.ID_ORGANIZATION,
M4SCO_WU_TREE2.SCO_ID_WU_CHILD
FROM
M4SCO_H_HR_RESP M4SCO_H_HR_RESP,
M4RSC_APPUSER M4RSC_APPUSER,
M4SCO_WU_TREE M4SCO_WU_TREE,
M4SCO_WU_TREE M4SCO_WU_TREE2
WHERE
M4RSC_APPUSER.ID_APP_USER = 'OSCARLG' AND
M4SCO_H_HR_RESP.SCO_ID_HR = M4RSC_APPUSER.ID_PERSON AND
M4SCO_H_HR_RESP.SCO_DT_START <= SYSDATE AND
SYSDATE <= M4SCO_H_HR_RESP.SCO_DT_END AND
M4SCO_H_HR_RESP.ID_ORGANIZATION = M4SCO_WU_TREE.ID_ORGANIZATION AND M4SCO_H_HR_RESP.STD_ID_WORK_UNIT = M4SCO_WU_TREE.SCO_ID_WU_CHILD AND M4SCO_WU_TREE.ID_ORGANIZATION = M4SCO_WU_TREE2.ID_ORGANIZATION AND M4SCO_WU_TREE2.SCO_LEFT_VALUE >= M4SCO_WU_TREE.SCO_LEFT_VALUE AND M4SCO_WU_TREE2.SCO_RIGHT_VALUE <= M4SCO_WU_TREE.SCO_RIGHT_VALUE
ORDER BY M4SCO_WU_TREE2.ID_ORGANIZATION, M4SCO_WU_TREE2.SCO_ID_WU_CHILD

Espero que os sirva... yo la uso mucho en el Meta4Object SSM_FILTRO.

Nota: Son para ORACLE, pero para SQL SERVER creo que con cambiar SYSDATE por GETDATE() funcionará igual.

No hay comentarios: