嗯,一種方法是使用一個巨大的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語句),但是如果我能夠在單個查詢中執行它,它將會提高性能。 –