1

検索メカニズムで使用するストアド プロシージャを実行しようとしています。

私がそれを機能させたい方法は、最初にSELECTwith を実行することLIKE TOYOTA%です。その後、結果が10件未満の場合は、追加するかUNION ALL、.SELECTLIKE %TOYOTA%

基本的に、これは私が探しているものです:

SELECT *
FROM CARS
WHERE CARS.MAKE LIKE '@searchQuery%'

IF(@@rowcount < 10)
   BEGIN
      UNION ALL
      SELECT *
      FROM CARS
      WHERE CARS.MAKE LIKE '%@searchQuery%'
   END

唯一の問題は、これができないことUNION ALLですIF

これを行っているのは、常に少なくとも 10 件の結果を可能な限り取得したいからです。少ない場合は、残りのスロットを、TOYOTA の名前が中間にある可能性のあるレコードで埋めたいと考えています。

4

2 に答える 2

1

これを行うと、常に 10 個の結果が得られます。

SELECT top 10 *
FROM CARS
WHERE CARS.MAKE LIKE '%@searchQuery%'
order by (case when cars.make like '@searchQuery%' then 0 else 1 end);

厳密にやりたいことを行うには (検索クエリで始まるすべてを取得し、10 未満の場合は 10 までパディングします)、ウィンドウ関数を使用できます。

select c.*
from (SELECT c.*,
             row_number() over (order by (case when c.MAKE LIKE '@searchQuery%' then 0 else 1 end
                               ) as seqnum
      FROM CARS c
      WHERE c.MAKE LIKE '%@searchQuery%'
     ) c
 where c.MAKE LIKE '@searchQuery%' or seqnum <= 10;
于 2013-08-14T23:15:42.970 に答える
0

テーブル変数を使用する必要があります...

DECLARE @MyTableVar table(
    CarID int NOT NULL,
    Puertas int,
    Ruedas int,
    FechaDeSalida datetime);

CARS テーブルと正確に等しいと宣言する必要があります。その後、あなたは

SELECT @MyTableVar=*
FROM CARS
WHERE CARS.MAKE LIKE '@searchQuery%'

変数には、クエリ結果があります。ついに:

IF(@@rowcount < 10)
   BEGIN
      SELECT *
      FROM @MyTableVar
      UNION ALL
      SELECT *
      FROM CARS
      WHERE CARS.MAKE LIKE '%@searchQuery%'
   END

私の悪い英語でごめんなさい!この助けを願っています!

于 2013-08-14T23:19:49.433 に答える