Preciso como sempre. Matou o problema Chiappa. Muito obrigado novamente.

[]s

Emerson Sanches



Em sex, 12 de jul de 2019 às 11:42, jlchia...@yahoo.com.br [oracle_br] <
oracle_br@yahoogrupos.com.br> escreveu:

>
>
> Ok : pra não ficar "no ar", vamos Exemplificar... Primeiro, vaeja que na
> query abaixo eu não tenho registros para TODOS os meses do ano 1981 :
>
> scott@DESENV:SQL>select empno, trunc(hiredate, 'month') data from emp
> where extract(year from hiredate)=1981;
>
>     EMPNO DATA
> --------- -------------------
>      7499 01/02/1981 00:00:00
>      7521 01/02/1981 00:00:00
>      7566 01/04/1981 00:00:00
>      7654 01/09/1981 00:00:00
>      7698 01/05/1981 00:00:00
>      7782 01/06/1981 00:00:00
>      7839 01/11/1981 00:00:00
>      7844 01/09/1981 00:00:00
>      7900 01/12/1981 00:00:00
>      7902 01/12/1981 00:00:00
>
> 10 linhas selecionadas.
>
> scott@DESENV:SQL>
>
> => Aí, digamos que eu tenho essa sua necessidade, ie : quando NÃO existir
> o dado na tabela principal, eu quero trazer de OUTRA fonte de dados :
> poderia ser uma tabela real mesmo, mas Outras possibilidades de 'INVENTAR'
> dados existem, uma delas é o CONNECT BY, funciona a partir do 9ir2, iirc ,
> vejamos :
>
> scott@DESENV:SQL>SELECT TO_DATE('01/' || to_char(l, 'FM00') || '/1981')
> data, 0 contagem  FROM (SELECT LEVEL l FROM dual CONNECT BY LEVEL < 13);
>
> DATA                 CONTAGEM
> ------------------- ---------
> 01/01/1981 00:00:00         0
> 01/02/1981 00:00:00         0
> 01/03/1981 00:00:00         0
> 01/04/1981 00:00:00         0
> 01/05/1981 00:00:00         0
> 01/06/1981 00:00:00         0
> 01/07/1981 00:00:00         0
> 01/08/1981 00:00:00         0
> 01/09/1981 00:00:00         0
> 01/10/1981 00:00:00         0
> 01/11/1981 00:00:00         0
> 01/12/1981 00:00:00         0
>
> 12 linhas selecionadas.
>
> scott@DESENV:SQL>
>
> ==> PRONTO, basta pedir que quando na primeira fonte de dados (a query na
> tabela EMP no meu exemplo) o dado venha da segunda fonte : COMO EU DISSE,
> UMA das maneiras é um OUTER JOIN, mas em alguns casos pode se usar MINUS,
> pode se usar Analytics (
> https://technology.amis.nl/2013/02/28/oracle-sql-spotting-combinations-that-occur-and-those-that-do-not-demonstrating-analytical-functions-outer-join-and-subquery-factoring/
> tem um exemplo), enfim....
>  Vou usar aqui OUTER JOIN direto  :
>
> scott@DESENV:SQL>ed
> Gravou file afiedt.buf
>
>   1  select nvl(E.data, F.data) DT, nvl(E.contagem, 0)
>   2    from (
>   3     select trunc(hiredate, 'month') as data, count(*) as contagem from
> emp where extract(year from hiredate)=1981 GROUP BY trunc(hiredate, 'month')
>   4         ) E,
>   5        (
>   6     select TO_DATE('01/' || to_char(l, 'FM00') || '/1981') data, 0
> contagem  FROM (SELECT LEVEL l FROM dual CONNECT BY LEVEL < 13)
>   7        ) F
>   8   where E.data (+) = F.data
>   9* order by 1
> scott@DESENV:SQL>/
>
> DT                  NVL(E.CONTAGEM,0)
> ------------------- -----------------
> 01/01/1981 00:00:00                 0
> 01/02/1981 00:00:00                 2
> 01/03/1981 00:00:00                 0
> 01/04/1981 00:00:00                 1
> 01/05/1981 00:00:00                 1
> 01/06/1981 00:00:00                 1
> 01/07/1981 00:00:00                 0
> 01/08/1981 00:00:00                 0
> 01/09/1981 00:00:00                 2
> 01/10/1981 00:00:00                 0
> 01/11/1981 00:00:00                 1
> 01/12/1981 00:00:00                 2
>
> 12 linhas selecionadas.
>
> scott@DESENV:SQL>
>
> ==> Ou seja : Janeiro não tinha ocorrência mostra ZERO, Fev tinha dois
> mostrou contagem de dois, Março não tinha, Abril tinha um... É isso ,
> certinho ??
>
> []s
>
>   Chiappa
>
> OBS :
>
>   1. nem preciso dizer que vc TEM que adaptar isso pra tua lógica aí
>
>   e
>
>   2. acabou ficando meio comprido porque não quis me dar ao trabalho de
> criar uma tabela (seja tabela real seja GTT), não duvido que talvez fique
> mais curto se vc OU criar uma tabela mesmo com os dados a se 'inventar' OU
> se vc usar CTE...
>
> 
>
  • [oracle_br] Retorno... Emerson Sanches emerson.sanc...@gmail.com [oracle_br]
    • Re: [oracle_br... Emerson Gaudencio emerson.fen...@gmail.com [oracle_br]
      • Re: [oracl... Emerson Sanches emerson.sanc...@gmail.com [oracle_br]
    • [oracle_br] Re... jlchia...@yahoo.com.br [oracle_br]
      • [oracle_br... jlchia...@yahoo.com.br [oracle_br]
        • Re: [o... Emerson Sanches emerson.sanc...@gmail.com [oracle_br]
          • Re... jlchia...@yahoo.com.br [oracle_br]
            • ... Emerson Sanches emerson.sanc...@gmail.com [oracle_br]
              • ... jlchia...@yahoo.com.br [oracle_br]

Responder a