12 Stimmen

MS-Zugang -> SELECT AS + ORDER BY = Fehler

Ich versuche, eine Abfrage zu erstellen, um die Region mit den meisten Verkäufen für Süßwaren abzurufen. grupo_produto" ist der Produkttyp, und "regiao" ist die Region. Ich habe also diese Abfrage:

SELECT TOP 1 r.nm_regiao,  (SELECT COUNT(*)
        FROM Dw_Empresa
        WHERE grupo_produto='1' AND 
        cod_regiao = d.cod_regiao) as total 
FROM Dw_Empresa d
INNER JOIN tb_regiao r ON r.cod_regiao = d.cod_regiao ORDER BY total DESC

Wenn ich dann die Abfrage ausführe, fragt MS-Access nach dem Parameter "total". Warum wird die neu erstellte "Spalte", die ich in der Select-Klausel erstellt habe, nicht berücksichtigt?

Vielen Dank im Voraus!

19voto

Oli_G Punkte 420

Alte Frage, ich weiß, aber es kann jemandem helfen, der weiß, dass man zwar nicht nach Aliasen, aber nach Spaltenindex sortieren kann. Zum Beispiel wird dies ohne Fehler funktionieren:

SELECT 
 firstColumn,
 IIF(secondColumn = '', thirdColumn, secondColumn) As yourAlias
FROM
 yourTable
ORDER BY
 2 ASC

Die Ergebnisse werden dann nach den Werten in der zweiten Spalte, dem Alias "yourAlias", geordnet.

9voto

VoteyDisciple Punkte 36203

Aliase sind nur in der Abfrageausgabe verwendbar. Sie können sie nicht in anderen Teilen der Abfrage verwenden. Leider müssen Sie die gesamte Subquery kopieren und einfügen, damit sie funktioniert.

6voto

haloua Punkte 41

So kann man es machen

select * from(
  select a + b as c, * from table)
  order by c

Access hat einige Unterschiede im Vergleich zu Sql Server.

2voto

onedaywhen Punkte 52850

Warum sie nicht die neuen Spalte", die ich in der Select-Klausel erstellt habe Klausel erstellt habe?

Denn Access (ACE/Jet) ist nicht mit dem SQL-92-Standard konform.

Betrachten Sie dieses Beispiel, das SQL-92 entspricht:

SELECT a AS x, c - b AS y
  FROM MyTable
 ORDER
    BY x, y;

In der Tat, x y y die einzigen gültigen Elemente in der ORDER BY Klausel, da alle anderen außerhalb des Anwendungsbereichs liegen (Ordnungszahlen der Spalten in der SELECT Klausel sind gültig, obwohl ihre Verwendung veraltet ist).

Access verschluckt sich jedoch an der obigen Syntax. Die entsprechende Access-Syntax lautet wie folgt:

SELECT a AS x, c - b AS y
  FROM MyTable
 ORDER
    BY a, c - b;

Den Kommentaren von @Remou entnehme ich jedoch, dass eine Unterabfrage in der ORDER BY Klausel ist in Access ungültig.

0voto

Mark Byers Punkte 761508

Versuchen Sie es mit einer Unterabfrage und ordnen Sie die Ergebnisse in einer äußeren Abfrage.

SELECT TOP 1 * FROM
(
    SELECT
        r.nm_regiao, 
        (SELECT COUNT(*)
         FROM Dw_Empresa
         WHERE grupo_produto='1' AND cod_regiao = d.cod_regiao) as total 
    FROM Dw_Empresa d
    INNER JOIN tb_regiao r ON r.cod_regiao = d.cod_regiao
) T1
ORDER BY total DESC

(Nicht getestet.)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X