SQL Server,加入生成的rank()

时间:2014-01-22 20:08:40

标签: sql sql-server select rank

我一直在寻找一段时间,试图找到一种方法来使用rank()作为用于连接的列。我查看了一些资源,hereherehere。这些都不符合我想要完成的任务。

我得到的是一串由空格分隔的id。我需要将这些ID没有特定的顺序分配给我的Animal表。我在一个只允许我在sql中执行此操作的平台内工作,因此使用高级编程语言不是一种选择。

这是一个例子。

我想把我的字符串“345345 345436 678768”解析出来并填写我的表格

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

我已经写了一个函数,它接受我的字符串,将它分开并编号。所以,当我给出我的分割功能“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 个答案:

答案 0 :(得分: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