MS-Access中的等价查询
下面是用ORACLE编写的查询,它给出了前一行,最后给出了输出。 如何在MS Access中的ORACLE查询下方构建框架,特别是ROWNUM部分。。感谢您的意见MS-Access中的等价查询,ms-access,Ms Access,下面是用ORACLE编写的查询,它给出了前一行,最后给出了输出。 如何在MS Access中的ORACLE查询下方构建框架,特别是ROWNUM部分。。感谢您的意见 orcl> WITH d 2 AS (SELECT ROWNUM rn, 3 dname, 4 deptno 5 FROM (SELECT dname, 6
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
对于您的查询使用的某些Oracle功能,Access SQL没有直接对应项,因此您无法将其“转换”为Access。相反,你必须从头重写它 您可以使用
DMax()
表达式返回“previous”dname
SELECT
dname,
deptno AS this_row,
DMax("dname", "dept", "dname < '" & [dname] & "'")
AS previous_dname
FROM dept;
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;
然后将结果集左键联接回dept
表,联接基于previous\u dname=dname
SELECT
dname,
deptno AS this_row,
DMax("dname", "dept", "dname < '" & [dname] & "'")
AS previous_dname
FROM dept;
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;
非常感谢。。。但这种方法是否有可能获得在下面链接中被质疑的先前值?这个DMax函数语法在这里对文本数据做了什么
DMax()
表达式计算所有小于当前dname
值的dname
值,并返回其中的“最大值”。正如ASELECT
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;