Вопрос

Привет, у меня есть какой-то 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. Это в основном то же самое на других платформах, которые его поддерживают.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top