Sql-Server
基於其他兩列添加 ID 列
我有一個查詢,它返回如下輸出:
[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 的情況下,這將在綁定的行之間任意分配一個順序編號。