SQL - подсчет - PullRequest
       38

SQL - подсчет

1 голос
/ 13 мая 2010

Привет, у меня есть немного 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

Ответы [ 2 ]

2 голосов
/ 13 мая 2010

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

1 голос
/ 13 мая 2010

А как насчет аналитических функций Oracle?

Это классический пример, в котором полезен RANK; -)

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