WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   MS Access Abfrage (http://www.wcm.at/forum/showthread.php?t=148164)

EMB 21.10.2004 14:39

MS Access Abfrage
 
Ich habe drei Entitäten (Land,Min,Kartenname) und möchte mir nun zu jedem Land nur diejenige Karte anzeigen lassen die die größte Minutenanzahl hat.

Wenn ich den Assistenten verwende komme ich aber leider wieder nur auf alle Datensätze. Die SQL Ansicht funktioniert anscheinend nicht so wie bei Oracle. Eigentlich müßte man doch nur ein distinct einfügen und nach max Kartenname sortieren oder?

hoshibrother 21.10.2004 19:10

probier mal im access bei der abfrage unten "maximum" oder so ähnlich. weis ich nicht mehr genau (verwende keine ms office mehr), wenn nicht such dich durch die hilfe.

wenn das nicht klappt, mach eigenes feld mit abfrage u verwende formel aus excel für maximu.

delphirocks 23.10.2004 18:43

Hallo,

sollte eigentlich genauso wie bei Oracle funktionieren, nur die alte (Oracle) Join Syntax wird glaub' ich nicht unterstützt.

select a.*,b.* from
a inner join b on
a.key=b.key
where
b.kartenname =
select max(kartenname) from b

Oder so ähnlich.

Vielleicht könntest du deine Anforderung etwas genauer spezifizieren, ist etwas unklar. - Vielleicht kannst du ja auch die Oracle Abfrage posten.



ciao

dr

EMB 25.10.2004 12:49

SELECT DISTINCTROW Tabelle1.Land, Tabelle1.Kartenname, Max(Tabelle1.[zum Handy]) AS [Max von zum Handy]
FROM Tabelle1
GROUP BY Tabelle1.Land, Tabelle1.Kartenname;

Das ist die von Access erstellte Abfrage (mittels Assistenten gemacht). Ich möchte aber, dass nur jene (Datensätze -Kombination Länder,Kartenname) angezeigt werden, die den größten Wert in der Spalte zum Handy haben.

Müßte da nicht die max Abfrage nach group by kommen?

EMB 25.10.2004 13:55

Nähere Informationen zur Tabelle:

Tabelle1.Land = String
Tabelle1.[zum Handy] = Integer
Tabelle1.Kartenname = String

Ich möchte einfach eine Abfrage erzeugen, die mir zu jedem Land, den Datensatz mit der größten Integer in der Zelle zum Handy
anzeigt.

Untenstehede Abfrage erzeugt mir eine Reihung (gereiht nach zum Handy) schließt zeigt mir aber nicht nur den jeweils größten Datensatz an. Bräuchte es da nict ur an der richtigen stelle ein Distinct.


SELECT Max(Tabelle1.Land) AS MaxvonLand, Tabelle1.[zum Handy], Tabelle1.Kartenname
FROM Tabelle1
GROUP BY Tabelle1.[zum Handy], Tabelle1.Kartenname
ORDER BY Max(Tabelle1.Land);

Shadow 25.10.2004 16:06

Ich kenne nur einen Weg das zu lösen. Der ist zwar relativ einfach zu verstehen, man braucht aber 2 Abfragen dafür:

Abfrage1:
Code:

SELECT [Tabelle1].[Land] AS MaxLand, Max([Tabelle1].[zum Handy]) AS MaxHandy
FROM Tabelle1
GROUP BY [Tabelle1].[Land];

Hier wird nach Land gruppiert der Max-Wert von "zum Handy" aufgelistet.

Nun noch eine zweite Abfrage die das Ergebnis der Abfrage1 einfach mit der "Tabelle1" verknüpft (MaxLand -> Land , MaxHandy -> zum Handy).

Fertig.

Es würde auch mit einer Unterabfrage innerhalb der Abfrage gehen, aber das ist komplizierter zu erklären und verstehen.
Das sieht dann so aus:
Code:

SELECT *
FROM Tabelle1
WHERE (Tabelle1.[zum Handy] In (SELECT Max([Tabelle1].[zum Handy])
AS MaxHandy FROM Tabelle1 GROUP BY [Tabelle1].[Land] HAVING Land = Tabelle1.Land; ));

Achtung: bei mehreren gleichen Werten in "zum Handy" werden mehrere Datensätze je Land angezeigt.

delphirocks 25.10.2004 22:03

Hallo, also ich weiss nicht ob ich dich richtig verstanden habe, aber:

select land,kartenname,max(handy) as maxhandy from tabelle
group by land,kartenname
having max(handy)=select max(handy) from tabelle1

?

Falls das nicht ist, vielleicht kannst du ja einmal ein paar Datensätze posten, die du gruppieren willst?

Bizeps 26.10.2004 21:16

Danke für eure Hilfe es funktioniert jetzt!!!!


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag