Pergunta

Oi eu tenho alguns sql ...

SELECT  
    AdviceNo,
    Registration
FROM tblSalesDetail

que produz algo como ...

ADV00001, ABC123
ADV00001, CDE564
ADV00002, FGE432
ADV00003, HUY789
ADV00003, MJS532
ADV00003, JFY428

Alguém pode me dizer como eu ajustaria para ver o seguinte, por favor?

ADV00001, ABC123, 1
ADV00001, CDE564, 2
ADV00002, FGE432, 1
ADV00003, HUY789, 1
ADV00003, MJS532, 2
ADV00003, JFY428, 3
Foi útil?

Solução

Como sobre as funções analíticas do Oracle?

Este é um exemplo clássico no qual a classificação é útil ;-)

SELECT AdviceNo,
       Registration,
       RANK () OVER (PARTITION BY AdviceNo ORDER BY Registration ASC) MY_RANK
  FROM tblSalesDetail;

Outras dicas

Você pode usar row_number() e partition by com um over cláusula para redefinir uma contagem com base em grupos; A sintaxe é algo como (note, não testado):

SELECT  
    AdviceNo,
    Registration,
    row_number() over
    (partition by AdviceNo
     order by Registration)     as Ordinal
FROM tblSalesDetail

partition by é um pouco como group by Mas ele não enrola os dados - apenas redefine o que você está calculando dentro da partição. Nesse caso, estamos calculando um número de linha usando uma função embutida e classificando -a por registro dentro dos grupos.

Este link para os documentos do MSDN Discute o uso do TOUR no T-SQL. É basicamente o mesmo em outras plataformas que a suportam.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top