Sql server 找到与“最佳匹配”;模糊的;排序逻辑
我需要使用“排名”列对下面临时表的结果进行分组的帮助 临时表(MS SQL)如下所示: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
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