我正在尝试编写一个返回表中最接近匹配的查询。该表表示层次结构,如下所示:
Hier_Code Group1 Group2 Group3
_________ ______ ______ ______
A 1 1 5
AA 1 2 5
AAA 1 2 5
AAB 1 3 5
AB 2 3 5
ABA 2 3 5
ABB 2 3 5
我正在搜索的值可能不完全匹配,在这种情况下,我希望它们“汇总”到下一级别以找到匹配项。例如:
Value Returns:
A 1 1 5 (Perfect match)
AAC 1 2 5 (AA is closest)
AABB 1 3 5 (AAB is closest)
这个想法是你会从搜索词中一次删除一个角色,直到找到匹配为止。我已尝试使用递归CTE执行此操作,并且还使用WHILE循环无效。
有什么建议吗?
提前致谢
答案 0 :(得分:2)
试试这个:
SELECT top 1 Group1, Group2, Group3
FROM temp
WHERE 'AABB' like Hier_Code + '%'
GROUP BY Group1, Group2, Group3
ORDER BY MAX(len(Hier_Code)) desc
答案 1 :(得分:0)
这是一个可用于创建动态SQL的启动器:
select id from t
where g1 = 1 and g2 = 1 and g3 = 5
union
select id from t
where g1 = 1 and g2 = 1
union
select id from t
where g1 = 1
UNION的默认行为是消除重复,因此在执行这三个选择之后,结果集中不会出现多次id。
问题在于有几种排列:
{g1, g2, g3}, {g1, g3}, {g1, g2}, {g2, g3}
所以你不能像我在我的例子中那样简单地取消最终条件。