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
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.