2016-09-08 32 views
3

我想選擇記錄並確定每個類似數據的排名數字。如何添加排名列?

我的數據如下。

MEMBER ID | LOAN AMOUNT 
1   | 2,000.00 
2   | 1,000.00 
3   | 4,000.00 
4   | 1,000.00 

我想要的結果如下所示。

RANK|MEMBER ID|LOAN AMOUNT 
1 |3  |4,000.00 
2 |1  |2,000.00 
3 |2  |1,000.00 
3 |4  |1,000.00 

RANK是一個新列。我正在使用MS SQL Server 2008,並創建一個如下所示的視圖表,但它不會導致所需內容。

select rank=count(*), s1.MemberID, s1.Loan_Amount 
    from (select MemberID, Loan_Amount from vwPrintTop20Borrowers) s1 
    group by s1.MemberID, s1.LOAN_AMOUNT 
    order by rank, s1.Loan_amount DESC 

請幫忙。謝謝! :)

+0

哪個版本的SQL SERVER? – Arulkumar

+0

是LOAN AMOUNT varchar? –

+0

嗨,Arulkumar,MS SQL Server 2008 .. – angel

回答

0
SELECT ROW_NUMBER() 
     OVER (ORDER BY Loan_Amount DESC) AS Rank, 
    MemberID, LOAN_AMOUNT, 
FROM vwPrintTop20Borrowers 
+0

不完全:row_number產生一個不重複的,連續的集合。該OP正在尋找一組重複。 –

6

只需使用RANK()

SELECT RANK() OVER(ORDER BY t.loan_amount DESC) as [rank], 
     t.memeber_id,t.loan_amount 
FROM YourTable t 

雖然這會造成漏洞E.G.

RANK | AMOUNT 
1  10 
2   9 
3   8 
3   8 
5   7 

爲了避免這種情況,對於SQL-服務器2008+,使用下面的查詢DENSE_RANK()

DENSE_RANK() OVER(ORDER BY t.loan_amount DESC) as [rank] 
+0

嗨@sagi。使用DENSE_RANK()得到它。謝謝。 – angel

1

用途:

Select Dense_Rank() OVER(ORDER BY [LOAN AMOUNT] DESC) as [Rank],[MEMBER ID],[LOAN AMOUNT] 
from YourTable 
1
select * into #P from (
    select  1 as [MEMBER ID]  , 2000.00 as [LOAN AMOUNT] union all 
    select  2      , 1000.00 union all 
    select  3       , 4000.00 union all 
    select  4       , 1000.00 
)P 


select rank()over( order by [LOAN AMOUNT] desc) as srno,[MEMBER ID],[LOAN AMOUNT] from #P 

輸出:

 srno MEMBER ID LOAN AMOUNT 
      1   3  4000.00 
      2   1  2000.00 
      3   2  1000.00 
      3   4  1000.00 
+0

以上應該是desc – swe

+0

是的,我編輯過, –