找到最佳匹配"模糊"排名逻辑

时间:2016-05-13 08:22:57

标签: sql-server

我需要帮助,使用' rank'对以下临时表的结果进行分组。柱。

临时表(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等等)。最终结果是高排名的行更有可能显示学生的实际学校与较低排名的行。

我需要帮助的地方是最终查询。我基本上想要返回所有学生信息(原始学生表中的所有行)和最可能相应的学校(由等级确定)。

像(伪代码)

之类的东西
select student_address, student_st, student_etc, school_address 
from @temp
where rank = max(rank)
group by student_address

我知道上面的SQL不正确,但我希望它能让你知道我想要实现的目标吗?

感谢任何指导。

2 个答案:

答案 0 :(得分:0)

我认为你很接近。可能需要使用子查询,如:

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

......虽然我错过了student_street来自哪里。然而,上面看起来就像你正在寻找的模式。

答案 1 :(得分:0)

你可以尝试一下:

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)