Вопрос
Привет, у меня есть какой-то SQL ...
SELECT
AdviceNo,
Registration
FROM tblSalesDetail
Это производит что-то вроде ...
ADV00001, ABC123
ADV00001, CDE564
ADV00002, FGE432
ADV00003, HUY789
ADV00003, MJS532
ADV00003, JFY428
Может кто-нибудь сказать мне, как я бы настроил его, чтобы увидеть следующее, пожалуйста?
ADV00001, ABC123, 1
ADV00001, CDE564, 2
ADV00002, FGE432, 1
ADV00003, HUY789, 1
ADV00003, MJS532, 2
ADV00003, JFY428, 3
Решение
Как насчет аналитических функций Oracle?
Это классический пример, в котором ранг полезно ;-)
SELECT AdviceNo,
Registration,
RANK () OVER (PARTITION BY AdviceNo ORDER BY Registration ASC) MY_RANK
FROM tblSalesDetail;
Другие советы
Ты можешь использовать row_number()
и partition by
с over
пункт для сброса количества на основе групп; Синтаксис что-то вроде (примечание, не проверено):
SELECT
AdviceNo,
Registration,
row_number() over
(partition by AdviceNo
order by Registration) as Ordinal
FROM tblSalesDetail
partition by
немного похоже group by
Но он не свернут данные - это просто сбрасывает все, что вы рассчитываете в разделе. В этом случае мы вычисляем номер строки, используя встроенный функцию и сортируя его путем регистрации в группах.
Эта ссылка на документы MSDN Обсуждается с использованием на T-SQL. Это в основном то же самое на других платформах, которые его поддерживают.