2014-01-22 35 views
0

我一直在尋找一段時間,現在試圖找到一種方法來使用rank()作爲列來用於連接。我查看了一些資源,here,herehere。這些都不符合我想要完成的事情。SQL Server,加入生成的排名()

我得到的是一串id被空格分開的字符串。我需要將這些ID分配給我的Animal表格。我在一個只允許我在sql中執行此操作的平臺內工作,因此使用高級編程語言不是一種選擇。

這裏是一個例子。

我想把我的字符串「345345 345436 678768」解析出來,並填寫我的表像這樣

|Name  |ID | 
------------------ 
|Monkey |345345| 
|Bird  |345436| 
|Horse |678768| 

我已經寫一個函數,我的字符串,打破它除了和衆多的IT 。所以,當我把我的分裂功能「345345 345436 678768」我得到:

|Num |ID | 
------------- 
|1 |345345| 
|2 |345436| 
|3 |678768| 

所以現在我想做的事情是這樣的:

select name, (rank() over(order by name)) as rank_num 
from dbo.Split(" ", "345345 345436 678768") split, animal 
where num = rank_num 

卻出現「無效的列名稱rank_num「

+1

不明白。在動物的表?哪裏'num'聯合其他什麼信息我從哪裏來?排名完成了什麼(看起來你想要訂購一些東西,但是什麼?你的期望輸出似乎不是按動物名稱排序的,如果這是什麼列「動物」在你的rank()函數中表示)。你怎麼知道哪個數字屬於哪個動物?你期望的結果是什麼? –

+0

你不能像這樣引用別名到rank_num。 – BlackICE

回答

2

我覺得這是你所需要的。

SELECT a.* 
FROM 
(
    select name, (rank() over(order by name)) as rank_num 
    from animal 
) as a 
JOIN dbo.Split(" ", "345345 345436 678768") split ON split.num = a.rank_num 
+0

謝謝!這就是訣竅! – user1943899