我有一個Access 2000 .mdb
文件。我有這個查詢在同一個數據庫,但在SQL Server上。該查詢在SQL Server中正常工作,但在Access中出現錯誤;我認爲這是由於ROW_NUMBER()
。將查詢從SQL Server轉換爲Access 2000
我無法使用vba進行此查詢,因爲我必須使用Odbc驅動程序運行它。
SELECT *
FROM
(SELECT
*,
ROW_NUMBER() OVER (ORDER BY cognome,nome ASC) AS RowID
FROM
(SELECT DISTINCT
(a.ID_PAZIENTE) AS codice,
a.NOME AS nome,
a.COGNOME AS cognome,
a.TITOLO AS titolo,
a.TELEFONOABITAZIONE AS tel,
a.TELEFONOUFFICIO AS uff,
a.FAX AS cell,
a.E_MAIL AS email,
a.SESSO AS sesso
FROM
PAZIENTI AS a
WHERE 1 = 1) AS AnagraficheDistinct
) AS Anagrafiche
WHERE
RowID >= 1 AND RowID <= 25
ORDER BY
cognome, nome ASC;
這是錯誤:
Syntax error (missing operator) in expression of query: "ROW_NUMBER() OVER (ORDER BY cognome,nome ASC)
我試着以下聯機文檔的查詢轉換,這是我做了什麼:
SELECT *
FROM (
SELECT Top 10
*
FROM
(
SELECT DISTINCT TOP 20 p.ID_PAZIENTE,p.cognome,p.nome
FROM PAZIENTI p
ORDER BY p.cognome ASC,p.nome ASC
) AS sub1
ORDER BY sub1.cognome DESC,sub1.nome DESC
) AS anagrafiche
ORDER BY p.cognome ASC,p.nome ASC
不幸的是這個查詢返回奇怪的結果。更改開始索引(How do I implement pagination in SQL for MS Access?),有時會返回10個結果(頁面大小),有時會根據開始索引(startpos +頁面大小)返回12個結果。
我做錯了什麼或這個東西在沒有VBA的情況下無法訪問?
感謝
好答案!只需在外部派生表中添加Rank,以便它可以在外部表的WHERE中使用。由於RowID是在最內層子查詢中計算的,因此您甚至可以刪除外部表「p」,因爲它不再需要。讓我們看看OP的想法。 – Parfait
謝謝Parfait。我認爲需要使用單獨的ORDER BY的外部查詢,當有多於一行的cognome具有相同的值時。在這種情況下,等級值將是相同的,除非我指定明確的ORDER BY作爲最後一步,否則沒有特定的順序 – CPMunich