嗯,一种方法是使用一个巨大的case
声明。类似这样的:
select t.*
from t
order by (case when accno = <accno> then 99
when left(accno, 15) = left(<accno>, 15) then 15
when left(accno, 14) = left(<accno>, 14) then 14
when left(accno, 13) = left(<accno>, 13) then 13
when left(accno, 12) = left(<accno>, 12) then 12
when left(accno, 11) = left(<accno>, 11) then 11
when left(accno, 10) = left(<accno>, 10) then 10
when left(accno, 9) = left(<accno>, 9) then 9
when left(accno, 8) = left(<accno>, 8) then 8
when left(accno, 7) = left(<accno>, 7) then 7
when left(accno, 6) = left(<accno>, 6) then 6
when left(accno, 5) = left(<accno>, 5) then 5
when left(accno, 4) = left(<accno>, 4) then 4
when left(accno, 3) = left(<accno>, 3) then 3
when left(accno, 2) = left(<accno>, 2) then 2
when left(accno, 1) = left(<accno>, 1) then 1
else 0
end) desc
fetch first 1 row only;
...您的表的设计意味着一个多部分的键,这将违背推荐的最佳做法。至少,它还要求你知道密钥的结构是重要的,这将是一个相关的问题。根据您的未来需求,更改设计可能是有保证的。 –
这是要求,我不能改变设计.. 这张表就像一个控制表,基于这一行(accno),他们想要选择一些值..我没有给这里完整的表结构 –
我可以实现这个在程序中(使用循环和多个sql语句),但是如果我能够在单个查询中执行它,它将会提高性能。 –