2

以下は、前の行を取得するために ORACLE で記述されたクエリであり、最後に出力されます。MS AccessでORACLEクエリの下にフレームを作成する方法、特にROWNUM部分..入力に感謝します

orcl> WITH d
  2       AS (SELECT ROWNUM rn,
  3                  dname,
  4                  deptno
  5           FROM   (SELECT dname,
  6                          deptno
  7                   FROM   dept
  8                   ORDER  BY dname)),
  9       e
 10       AS (SELECT ROWNUM + 1 rn,
 11                  dname,
 12                  deptno
 13           FROM   (SELECT dname,
 14                          deptno
 15                   FROM   dept
 16                   ORDER  BY dname))
 17  SELECT rn,
 18         d.dname,
 19         d.deptno this_row,
 20         e.deptno previous_row
 21  FROM   d
 22         left outer join e USING (rn)
 23  ORDER  BY dname;

    RN DNAME            THIS_ROW      previous_ROW

     1 ACCOUNTING             10
     2 OPERATIONS             40           10
     3 RESEARCH               20           40
     4 SALES                  30           20
4

1 に答える 1

2

Access SQL には、クエリが使用する Oracle 機能の一部に直接対応するものがないため、それを Access に「変換」することはできません。代わりに、最初から書き直す必要があります。

式を使用しDMax()て "前の" を返すことができますdname

SELECT
    dname,
    deptno AS this_row,
    DMax("dname", "dept", "dname < '" & [dname] & "'")
        AS previous_dname
FROM dept;

そのクエリは、次の結果セットを返します。

dname       this_row previous_dname
ACCOUNTING        10
OPERATIONS        40 ACCOUNTING
RESEARCH          20 OPERATIONS
SALES             30 RESEARCH

次に、その結​​果セットをdeptテーブルに戻し、結合をベースにしprevious_dname = dnameます。

SELECT
    d1.dname,
    d1.this_row,
    d2.deptno AS previous_row
FROM
    (
        SELECT
            dname,
            deptno AS this_row,
            DMax("dname", "dept", "dname < '" & [dname] & "'")
                AS previous_dname
        FROM dept
    ) AS d1
    LEFT JOIN dept AS d2
    ON d1.previous_dname = d2.dname
ORDER BY d1.dname;

rn(ROWNUM) 列は、このアプローチでの結合には必要ないため省略しました。ただし、他の理由でまだ必要/必要な場合は、DCount()式で導出できます。

SELECT
    d1.rn
    d1.dname,
    d1.this_row,
    d2.deptno AS previous_row
FROM
    (
        SELECT
            DCount("*", "dept", "dname <= '" & [dname] & "'")
                AS rn
            dname,
            deptno AS this_row,
            DMax("dname", "dept", "dname < '" & [dname] & "'")
                AS previous_dname
        FROM dept
    ) AS d1
    LEFT JOIN dept AS d2
    ON d1.previous_dname = d2.dname
ORDER BY d1.dname;
于 2012-08-22T07:00:57.093 に答える