Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 找到与“最佳匹配”;模糊的;排序逻辑_Sql Server - Fatal编程技术网

Sql server 找到与“最佳匹配”;模糊的;排序逻辑

Sql server 找到与“最佳匹配”;模糊的;排序逻辑,sql-server,Sql Server,我需要使用“排名”列对下面临时表的结果进行分组的帮助 临时表(MS SQL)如下所示: student_address | school_address | student_st| school_st| district | districtID | rank --------------------------------------------------------------------------------------- 123 some street | 12 apple wa

我需要使用“排名”列对下面临时表的结果进行分组的帮助

临时表(MS SQL)如下所示:

student_address | school_address | student_st| school_st| district | districtID | rank 
---------------------------------------------------------------------------------------
123 some street |  12 apple way  |    CT     |   CT     |  322     |     322    |  0.2
123 some street |  33 pear street|    CT     |   NJ     |  039     |     039    |  0.1
333 another st. |      NULL      |    VT     |   NULL   |  111     |     111    |  0.0
我填充了@temp表,如下所示:

SELECT st.student_address, sc.school_address, st.student_st, sc.district, st.districtID, '0.0' as rank
FROM students st
LEFT OUTER JOIN schools sc
ON st.[District ID] = sc.District
ORDER BY st.[District ID] asc;
我根据临时表的结果进行了一系列更新,根据某些规则更改了“排名”列(例如,学校和学生之间没有匹配=0.0,只有地区匹配=0.1,地区匹配和州匹配=0.2等等)。最终结果是排名较高的行更有可能显示学生的实际学校,而排名较低的行则更可能显示学生的实际学校

我需要帮助的地方是最后一个问题。我基本上希望返回所有学生信息(原始学生表中的所有行)和最可能的对应学校(由排名决定)

类似于(伪代码)

我知道上面的SQL不是正确的,但我希望它能让您了解我想要实现的目标


谢谢你的指导。

我想你很接近了。可能需要使用如下子查询:

SELECT student_address, student_st, student_etc, school_address
FROM @temp
WHERE rank = (SELECT MAX(rank) FROM @temp)

…虽然我不知道学生街从哪里来。然而,上面的内容看起来就像你正在寻找的模式。

我想你已经接近了。可能需要使用如下子查询:

SELECT student_address, student_st, student_etc, school_address
FROM @temp
WHERE rank = (SELECT MAX(rank) FROM @temp)
…虽然我不知道学生街从哪里来。但是,上面的模式看起来就像您正在寻找的模式。

您可以尝试以下方法:

select student_address, student_st, student_etc, school_address,RANK
from @temp t1
group by student_address, student_st, student_etc, school_address,RANK having 
RANK=(select MAX(RANK) from @temp t2 where t1.student_address=t2.student_address)
您可以尝试以下方法:

select student_address, student_st, student_etc, school_address,RANK
from @temp t1
group by student_address, student_st, student_etc, school_address,RANK having 
RANK=(select MAX(RANK) from @temp t2 where t1.student_address=t2.student_address)

谢谢,杰夫。但是,这只是给了我可能排名最高的结果。我想要的是给定当前@temp表的最高排名。例如,如果您查看我的表格,您会看到“123 some street”的两个选项。在这种情况下,只返回“12 apple way”,因为它的排名更高(0.2)。谢谢,杰夫。但是,这只是给了我可能排名最高的结果。我想要的是给定当前@temp表的最高排名。例如,如果您查看我的表格,您会看到“123 some street”的两个选项。在这种情况下,只返回“12 apple way”,因为它的排名较高(0.2)。谢谢,但与我对下面Jeff的回答相同。更新了查询。@CodeSherphanks,但与我对下面Jeff的回答相同。更新了查询。@CodeSherpa