BlackTDN Search

quinta-feira, 10 de agosto de 2017

[BlackTDN] :: Identificando as marcações ímpares na tabela SP8

1) A consulta das marcações impares;
2) A "deleção lógica" dos registros impares;

Segue:

1) Para consultar as marcações impares:

------------------------------------------------------------------------------------------------
SELECT SP8.P8_FILIAL
      ,SP8.P8_MAT
      ,SP8.P8_PAPONTA
      ,SP8.P8_ORDEM
  FROM SP8010 SP8
WHERE SP8.D_E_L_E_T_=' '
GROUP BY SP8.P8_FILIAL
        ,SP8.P8_MAT
        ,SP8.P8_PAPONTA
        ,SP8.P8_ORDEM
HAVING ((COUNT(*)%2)=1)
ORDER BY 1,2,3,4
------------------------------------------------------------------------------------------------
2) Para a "Deleção Lógica" das marcações impares:

UPDATE SP8_U
    SET SP8_U.D_E_L_E_T_='*'
FROM
  SP8010 SP8_U
  INNER JOIN
  (
      SELECT SP8.P8_FILIAL
            ,SP8.P8_MAT
            ,SP8.P8_PAPONTA
            ,SP8.P8_ORDEM
      FROM SP8010 SP8
    WHERE SP8.D_E_L_E_T_=' '
    GROUP BY SP8.P8_FILIAL
            ,SP8.P8_MAT
            ,SP8.P8_PAPONTA
            ,SP8.P8_ORDEM
    HAVING ((COUNT(*)%2)=1)
   ) SP8_R
   ON  SP8_U.P8_FILIAL=SP8_R.P8_FILIAL
  AND SP8_U.P8_MAT=SP8_R.P8_MAT
  AND SP8_U.P8_PAPONTA=SP8_R.P8_PAPONTA
  AND SP8_U.P8_ORDEM=SP8_R.P8_ORDEM
WHERE SP8_U.D_E_L_E_T_=' ' 

OU
------------------------------------------------------------------------------------------------
MERGE INTO
  SP8010 SP8_U
USING
  (
      SELECT SP8.P8_FILIAL
            ,SP8.P8_MAT
            ,SP8.P8_PAPONTA
            ,SP8.P8_ORDEM
      FROM SP8010 SP8
    WHERE SP8.D_E_L_E_T_=' '
    GROUP BY SP8.P8_FILIAL
            ,SP8.P8_MAT
            ,SP8.P8_PAPONTA
            ,SP8.P8_ORDEM
    HAVING ((COUNT(*)%2)=1)
  ) SP8_R
ON  SP8_U.P8_FILIAL=SP8_R.P8_FILIAL
AND SP8_U.P8_MAT=SP8_R.P8_MAT
AND SP8_U.P8_PAPONTA=SP8_R.P8_PAPONTA
AND SP8_U.P8_ORDEM=SP8_R.P8_ORDEM
WHEN MATCHED THEN
  UPDATE SET
    SP8_U.D_E_L_E_T_='*';

------------------------------------------------------------------------------------------------
Obs.:

1) Antes de efetuar qualquer operação que modifique os dados diretamente no SGBD efetue uma cópia da tabela;

2) Nem sempre os registros devem ser deletados. A melhor opção é identificar os funcionários com marcações impares e incluir a marcação faltante.