0

この MS-Access クエリは改善できますか?

つまり、「SELECT TOP 1 col FROM Table2」行が繰り返されます

Table2 の curindex の前にインデックスがある場合、クエリは Table2 の col の前の値を返します。

それ以外の場合は、ID に一致する col の値が Table3 から返されます。

すなわち

curindex = 7 の場合、返される値 = Table2 から 221

curindex = 5 の場合、返される値 = Table3 の 200

Table2                               Table3
id index  col                        id    col
1    1    110                        1     100
1    2    120                        2     200
1    3    130                        3     300
1    4    140
2    5    211
2    6    221
2    7    231

PARAMETERS [curindex] Short;
SELECT TOP 1
  IIF (
    ( SELECT TOP 1 col
      FROM Table2
      WHERE index < [curindex]
       AND id =
        ( SELECT id
           FROM Table2
           WHERE index = [curindex])
    ) ,
        ( SELECT TOP 1 col
          FROM Table2
          WHERE index < [curindex]
            AND id =
            ( SELECT id
              FROM Table2
              WHERE index = [curindex])
          ORDER BY index DESC
        ),
        ( SELECT TOP 1 col
          FROM Table3
          WHERE id = 
           ( SELECT id
             FROM Table2
             WHERE index = [curindex])
        )
     ) AS col
FROM Table2
ORDER BY index
4

1 に答える 1

0

結果クエリを減らすことで、iff 条件のコストを制限できます。

すなわち

SELECT TOP 1
  IIF (
( SELECT TOP 1 col
  FROM Table2
  WHERE index < [curindex]
   AND id =
    ( SELECT id
       FROM Table2
       WHERE index = [curindex])
) ,
    ( SELECT TOP 1 col
      FROM Table2
      WHERE index = [curindex])
    ),
    ( SELECT TOP 1 col
      FROM Table3
      WHERE id = 
       ( SELECT id
         FROM Table2
         WHERE index = [curindex])
    )
 ) AS col
FROM Table2
ORDER BY index  
于 2012-06-21T21:21:56.763 に答える