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!

0voto

Fionnuala Punkte 89346

Wie wäre es damit:

SELECT TOP 1  r.nm_regiao 
FROM (SELECT Dw_Empresa.cod_regiao, 
             Count(Dw_Empresa.cod_regiao) AS CountOfcod_regiao
      FROM Dw_Empresa
      WHERE Dw_Empresa.[grupo_produto]='1'
      GROUP BY Dw_Empresa.cod_regiao
      ORDER BY Count(Dw_Empresa.cod_regiao) DESC) d
INNER JOIN tb_regiao AS r 
ON d.cod_regiao = r.cod_regiao

0voto

Larry Lustig Punkte 47313

Ich schlage vor, eine Zwischenabfrage zu verwenden.

 SELECT r.nm_regiao, d.grupo_produto, COUNT(*) AS total
   FROM Dw_Empresa d INNER JOIN tb_regiao r ON r.cod_regiao = d.cod_regiao
   GROUP BY r.nm_regiao, d.grupo_produto;

Wenn Sie das GroupTotalsByRegion nennen, können Sie dann tun:

SELECT TOP 1 nm_regiao, total FROM GroupTotalsByRegion 
  WHERE grupo_produto = '1' ORDER BY total DESC

Sie denken vielleicht, dass es zusätzliche Arbeit ist, die Zwischenabfrage zu erstellen (und in gewisser Weise ist es das auch), aber Sie werden auch feststellen, dass viele Ihrer anderen Abfragen auf GroupTotalsByRegion basieren werden. Sie möchten vermeiden, dass diese Logik in vielen anderen Abfragen wiederholt wird. Indem Sie es in einer Ansicht belassen, bieten Sie einen vereinfachten Weg zur Beantwortung vieler anderer Fragen.

0voto

David Borges Punkte 95

Wie wäre es mit der Verwendung: MIT xx AS ( 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 ) SELECT * VON xx BESTELLUNG BY insgesamt

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