Sql-Server

基於其他兩列添加 ID 列

  • June 15, 2016

我有一個查詢,它返回如下輸出:

[Location] [Reference] [Year] [Int1] [Int2]
   England           1   2015     13    201
   England           1   2015     12     57
   England           1   2015      4     14
   England           2   2015     18     29
   England           2   2015     18     29
   England           1   2016     32     67
   England           1   2016     43     11
   England           2   2016     10     56

其中 int1 和 int2 列表示有關位置的一些計算數據。我試圖在報告中表示數據,並意識到我可以使用以下形式的 ID 列:

[ID][Location] [Reference] [Year] [Int1] [Int2]
   1   England           1   2015     13    201
   2   England           1   2015     12     57
   3   England           1   2015      4     14
   1   England           2   2015     18     29
   2   England           2   2015     33     12
   1   England           1   2016     32     67
   2   England           1   2016     43     11
   1   England           2   2016     10     56

對於具有相同參考和年份值的每一行,該值都會遞增。

到目前為止,我已經嘗試使用下面範例中的 Ranking 函式來實現這一點,但運氣不佳。

SELECT Location, Reference, Year, Int1, Int2,
DENSE_RANK() OVER (PARTITION BY Year ORDER BY Reference ASC) AS rnk
FROM Value

退貨

[Location] [Reference] [Year] [Int1] [Int2][rnk]
   England           1   2015     13    201    1
   England           1   2015     12     57    1
   England           1   2015      4     14    1
   England           2   2015     18     29    2
   England           2   2015     33     12    2
   England           1   2016     32     67    1
   England           1   2016     43     11    1
   England           2   2016     10     56    2

所以我的問題是有沒有辦法使用排名函式、Rank、DENSE_RANK 等來實現這一點?失敗了,我最好的選擇是什麼?

有人建議 CURSOR 可以幫助我以這種方式對數據進行排序,但在閱讀了它的使用後,我想確定是否可以使用基於集合的方法。

我試圖為這個問題創建一個 SQLFiddle,但目前我似乎無法創建 SQL Server 版本。我已經使用 MySQL 5.6 創建了這個,因此您至少可以訪問該模式。道歉。

您只需要

SELECT Location, 
      Reference, 
      Year,  
      Int1, 
      Int2,
      ROW_NUMBER() OVER (PARTITION BY Year, Reference 
                             ORDER BY Int2 DESC) AS [Id]
FROM Value

給出你想要的結果(線上展示)

在綁定 Year,Reference,Int2 的情況下,這將在綁定的行之間任意分配一個順序編號。

引用自:https://dba.stackexchange.com/questions/141342