1

嗨,我有一些 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
4

2 回答 2

2

您可以使用androw_number()子句来重置基于组的计数;语法类似于(注意,未经测试):partition byover

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

partition by有点像group by,但它不会汇总数据 - 它只是重置您在分区内计算的任何内容。在这种情况下,我们使用内置函数计算行号,并按组内的注册对其进行排序。

这个指向 MSDN 文档的链接讨论了在 T-SQL 上使用 OVER。在其他支持它的平台上基本相同。

于 2010-05-13T16:47:49.247 回答
1

Oracle 分析函数怎么样?

这是一个经典的例子,其中 RANK 很有用;-)

SELECT AdviceNo,
       Registration,
       RANK () OVER (PARTITION BY AdviceNo ORDER BY Registration ASC) MY_RANK
  FROM tblSalesDetail;
于 2010-05-13T16:46:03.357 回答