【问题标题】:Oracle SQL : How to get same index for the same row values?Oracle SQL:如何为相同的行值获取相同的索引?
【发布时间】:2014-06-12 21:36:46
【问题描述】:

我可能没有在标题中清楚地说明问题,这就是我想要的:

我有一张这样的客户表:

CustNo    Name     State   TaxID 

10001     Tom      CA      12354
10001     Tom      CA      12355
10001     Tom      CA      12356
10002     Jack     IL      12354
10002     Jack     IL      12355
10002     Jack     IL      12356
10002     Jack     IL      12357
10002     Jack     IL      12358
10003     Eric     TX      12356
10003     Eric     TX      12359

现在我想在 Oracle 10G DB 中编写一个查询以获得这样的报告:

  Index  CustNo    Name     State   TaxID 

   1     10001     Tom      CA      12354
   1     10001     Tom      CA      12355
   1     10001     Tom      CA      12356
   2     10002     Jack     IL      12354
   2     10002     Jack     IL      12355
   2     10002     Jack     IL      12356
   2     10002     Jack     IL      12357
   2     10002     Jack     IL      12358
   3     10003     Eric     TX      12356
   3     10003     Eric     TX      12359

规则很明显:相同的 CustNo 应该具有相同的索引。

如果可以的话,请在此处尝试查询:http://sqlfiddle.com/#!4/7da53/1

【问题讨论】:

  • @Notulysses 否,CustNo 可以从任意数字开始,索引从 1 开始计数,最后一个索引将是唯一 CustNo 计数的总数。
  • @OracleUser 太好了,这正是我想要的,谢谢!

标签: sql oracle indexing


【解决方案1】:

您正在寻找dense_rank():

select dense_rank() over (order by CustNo) as theindex,
       t.*
from table t;

【讨论】:

    【解决方案2】:
    select dense_Rank() over (order by custno) as cIndex
         , CustNo
         , name
         , state
         , taxid 
    from customer;
    

    【讨论】:

    • 我没有看到索引或与此查询中的实际问题相关的任何其他内容。
    • @BradleyDotNET 也许我的问题不够清楚,但第一列正是我想要的。
    猜你喜欢
    • 1970-01-01
    • 2019-09-17
    • 1970-01-01
    • 1970-01-01
    • 2023-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    相关资源
    最近更新 更多