我一直在寻找一段时间,试图找到一种方法来使用rank()作为用于连接的列。我查看了一些资源,here,here和here。这些都不符合我想要完成的任务。
我得到的是一串由空格分隔的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'
答案 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