Chiappa,

Como sempre na mosca brother obrigado  ... era exatamente isso que
precisava ... obrigado a todos \o/

Em 23 de setembro de 2015 15:42, jlchia...@yahoo.com.br [oracle_br] <
oracle_br@yahoogrupos.com.br> escreveu:

>
>
> Opa, então : Óbvio, o GROUP BY "comum" é CLARO que não serve, ele
> transforma N linhas em uma só ("ensanduícha", "comprime", como eu dizia
> pros meus alunos) e te dá UM valor-resultado, que pode ser a SOMA, a Média,
> o MAX/MIN, absolutamente não é isso que vc quer, vc NÂO quer trabsformar as
> N linhas numa só...
>  Aí, não sendo possível usar os comandos built-in da sua tool cliente e/ou
> tool ou linguagem de programação (sqlplus, sql developer, toad e várias
> outras possuem comandos nativos pra sua necessidade), tendo que ser em SQL
> apenas então vc pode pesquisar que entre as funções básicas/escalares do
> RDBMS Oracle que NENHUMA vai te ajudar : o fato é que vc quer uma lógica
> que DEPENDA do valor exibido na linha anterior do resultset, pois vc só
> quer exibir o valor de uma dada coluna-chave a primeira vez, e as funções
> básicas só trabalham/enxergam o registro atual....
>   SEMPRE que vc precisa de uma lógica que tenha que levar em conta o
> registro anterior e/ou o próximo registro em SQL apenas no RDBMS Oracle
> (sem lançar mão de PL/SQL), vc VAI TER que usar uma função analítica, se é
> desejado trabalhar em SQL apenas....
> Exemplo :
>
> create table TB_TESTE(
>   coluna1 varchar2(5),
>   coluna2 number,
>   coluna3 number,
>   coluna4 number
>   );
>
> insert into TB_TESTE values('XXXXX',1,15,200);
> insert into TB_TESTE values('XXXXX',2,16,202);
> insert into TB_TESTE values('XXXXX',3,13,205);
> insert into TB_TESTE values('XXXXX',4,14,505);
> insert into TB_TESTE values('YYYYY',1,25,300);
> insert into TB_TESTE values('YYYYY',2,26,302);
>
> commit;
>
> select * from TB_TESTE;
>
> ==> eis o resultado :
>
> COLUNA1     COLUNA2    COLUNA3    COLUNA4
> -------  ---------- ---------- ----------
> XXXXX             1         15        200
> XXXXX             2         16        202
> XXXXX             3         13        205
> XXXXX             4         14        505
> YYYYY             1         25        300
> YYYYY             2         26        302
>
>  6 linhas selecionadas
>
>  O que eu preciso é "mostrar" pro sql se a ocorrência corrente do valor na
> coluna1 é a primeira ou não, e se não for a primeira eu "oculto"/mostro um
> NULL... LOGICAMENTE, a ROWNUM não serve porque ela mostra o número de linha
> geral da query, a gente precisa mostrar o número de linha para o 'grupo' de
> registros da chave XXXXX, depois zerar esse contador quando o valor
> mudar.... Isso pode ser assim :
>
>  select coluna1, coluna2, coluna3, coluna4, row_number()  over (partition
> by coluna1 order by coluna1) NUM from TB_TESTE;
>
> COLUNA1    COLUNA2    COLUNA3    COLUNA4        NUM
> ------- ---------- ---------- ---------- ----------
> XXXXX            1         15        200          1
> XXXXX            2         16        202          2
> XXXXX            3         13        205          3
> XXXXX            4         14        505          4
> YYYYY            1         25        300          1
> YYYYY            2         26        302          2
>
>  6 linhas selecionadas
>
>  Tá vendo como agora sim fui capaz de dizer se é a primeira ocorrência ou
> não do valor-chave ?? Fica ** trivial ** meter um CASE e perguntar isso :
>
>
> SELECT CASE WHEN NUM=1 THEN COLUNA1 ELSE NULL END as COLUNA1, coluna2,
> coluna3, coluna4
>    FROM (select coluna1, coluna2, coluna3, coluna4, row_number()  over
> (partition by coluna1 order by coluna1) NUM from TB_TESTE) ;
>
> COLUNA1    COLUNA2    COLUNA3    COLUNA4
> ------- ---------- ---------- ----------
> XXXXX            1         15        200
>                  2         16        202
>                  3         13        205
>                  4         14        505
> YYYYY            1         25        300
>                  2         26        302
>
> 6 linhas selecionadas
>
> []s
>
>   Chiappa
> 
>
  • [ora... Mario Rodrigues marioirodrig...@gmail.com [oracle_br]
    • ... Vitor Junior vitorj...@gmail.com [oracle_br]
      • ... 'Fernando Franquini 'capin'' fernando.franqu...@gmail.com [oracle_br]
    • ... 'Schiavini' et...@schiavini.inf.br [oracle_br]
      • ... Mario Rodrigues marioirodrig...@gmail.com [oracle_br]
        • ... jlchia...@yahoo.com.br [oracle_br]
          • ... Mario Rodrigues marioirodrig...@gmail.com [oracle_br]
    • ... Nino ninoba...@gmail.com [oracle_br]

Responder a