SQL Server2012Expressの使用。キーと値のペアを表すテーブルがあります。keycolはテーブルのPKです。クエリパラメータがテーブル内の2つのkeycol値の間にある場合に、テーブルをクエリしてvalcolを見つける最適な方法を見つけようとしています。したがって、keycol = 15を探している場合は「a」を検索し、keycol=20の場合は「b」を検索します。keycol=36の場合は「c」を検索します。
;
with tblextr ( keycol , valcol )
As
(
Select 10 , 'a'
Union All
Select 19 , 'a'
Union All
Select 20 , 'b'
Union All
Select 29 , 'b'
Union All
Select 30 , 'c'
Union All
Select 39 , 'c'
)
select valcol from tblextr
where keycol = (
select max(keycol)
from tblextr
where keycol <= 36
)
keycolはすでにPKですが、SQLを私が持っているよりもうまく書く方法はありますか?テーブルに置くべき別のインデックスはありますか?速度が上がってもスペースを増やしてもかまいません。これはルックアップテーブルであるため、行は、テーブル全体を再作成する更新の一部として毎月追加されるだけです。
ありがとう。