Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Access Group by (https://www.delphipraxis.net/126582-access-group.html)

Jonas 28. Dez 2008 21:17

Datenbank: Access • Version: 2007 • Zugriff über: jet

Access Group by
 
Hallo. Ich habe folgendes Problem.

Wenn ich diese Anfrage ohne Group By benutze, werden in meinem Grid ALLE Einträge von *Schuppenanzahl* angezeigt. Es soll jedoch nur der letzte Eintrag jeweils von *Schuppenanzahl* angezeigt werden.

Meine Idee war es mit Group By die einträge zu gruppieren, was jedoch nicht klappt.
SQL-Code:
'SELECT * FROM Schuppen s'
+ ' INNER JOIN Schuppenanzahl a'
+ ' ON s.ID = a.ParentID'
+ ' WHERE (s.Stand LIKE ''%' + searchstring + '%'') GROUP BY a.ParentID, s.ID ORDER BY a.datum';
Eine weitere Idee von mir war es auch mit TOP 1 ein Limit zu setzen, was aber bei dem Inner Join nicht geht.

Hat jemand eine Idee, vielleicht mit nem SubSelect?

mkinzler 28. Dez 2008 21:27

Re: Access Group by
 
Wenn Access einen Subselect mit mehreren Werten unterstützt:
SQL-Code:
Select s.*, (select Top 1 * from Schuppenanzahl a where ParentID = s.ID order by ID desc) ...

omata 28. Dez 2008 21:42

Re: Access Group by
 
Was auch immer du da eigentlich machen willst...
SQL-Code:
SELECT *
FROM schuppen s
INNER JOIN schuppenanzahl a
  ON s.id = a.parentID
WHERE s.stand LIKE :searchstring
  AND datum = (SELECT MAX(datum)
               FROM schuppenanzahl
               WHERE parentID = s.id)
ORDER BY a.datum
oder

SQL-Code:
SELECT *
FROM schuppen s
WHERE s.stand LIKE :searchstring
  AND datum = (SELECT MAX(datum)
               FROM schuppenanzahl
               WHERE parentID = s.id)

Jonas 29. Dez 2008 11:29

Re: Access Group by
 
Zitat:

Zitat von mkinzler
Wenn Access einen Subselect mit mehreren Werten unterstützt:
SQL-Code:
Select s.*, (select Top 1 * from Schuppenanzahl a where ParentID = s.ID order by ID desc) ...

Da bekomm ich leider den Fehler:
Zitat:

You have written a subquery that can return more than one field without using the EXISTS reserved word in the main query's From clause.
Rrevise the SELECT statement of the subquery to request only one field.


[quote="omata"]Was auch immer du da eigentlich machen willst...
SQL-Code:
SELECT *
FROM schuppen s
INNER JOIN schuppenanzahl a
  ON s.id = a.parentID
WHERE s.stand LIKE :searchstring
  AND datum = (SELECT MAX(datum)
               FROM schuppenanzahl
               WHERE parentID = s.id)
ORDER BY a.datum
Mhm das kann ich wohl compilieren und funktioniert auch, hat aber nicht den gewünschten Effekt.

Ich möchte eigentlich nur Tabelle Schuppen durchsuchen und dazu passend die LETZTEN einträge von Schuppenanzahl angezeigt bekommen, so bekomme ich noch immer ALLE einträge von Schuppenanzahl angezeigt. :(

mkinzler 29. Dez 2008 11:33

Re: Access Group by
 
Zitat:

Da bekomm ich leider den Fehler:...
Hatte ich befürchtet. Brauchst du alle Werte der 2. Tabelle?

Jonas 29. Dez 2008 11:43

Re: Access Group by
 
Eigentlich brauch ich nur datum und preis.
Habe es auch schon mit
Delphi-Quellcode:
(SELECT Top 1 datum, preis FROM
... versucht, hat aber nicht geklappt, selber fehler.

omata 29. Dez 2008 14:05

Re: Access Group by
 
Zitat:

Zitat von Jonas
... Es soll jedoch nur der letzte Eintrag jeweils von *Schuppenanzahl* angezeigt werden.

Zitat:

Zitat von Jonas
Ich möchte eigentlich nur Tabelle Schuppen durchsuchen und dazu passend die LETZTEN einträge von Schuppenanzahl angezeigt bekommen ...

Leider artikulierst du dich nicht eindeutig, deshalb auch mein Kommentar...
Zitat:

Zitat von omata
Was auch immer du da eigentlich machen willst...

Soll nun nur der letzte Eintrag ausgegeben werden, also immer nur eine einzige Zeile zurückgeliefert werden? Oder sollen die letzten Einträge pro Schuppenanzahl ausgegeben werden? Deshalb hatte ich zwei Varianten gezeigt, da einfach nicht klar ist was du da eigentlich genau haben möchtest.

Also noch ein neuer Versuch...
SQL-Code:
SELECT *
FROM schuppen s
INNER JOIN schuppenanzahl a
  ON s.id = a.parentID
WHERE s.stand LIKE :searchstring
  AND datum = (SELECT MAX(datum)
               FROM schuppenanzahl)
ORDER BY a.datum

Jonas 29. Dez 2008 14:40

Re: Access Group by
 
Sorry.

Ich versuchs nochma klar zu sagen:

Ich möchte EINE komplette Zeile pro Eintrag haben, welche sich aus Schuppen und Schuppenanzahl zusammensetzt.

Mit der aktuellen Variante bekomme ich leider wieder alle Einträge aus Schuppenanzahl, was ich nicht möchte.

Ich hoffe es ist nun was klarer, tut mir leid. :oops:

omata 29. Dez 2008 15:22

Re: Access Group by
 
Ich verstehe deine Tabellen- und Daten-Struktur leider nicht, sorry. Vielleicht kann dir ja jemand anderes helfen.

Jonas 30. Dez 2008 01:44

Re: Access Group by
 
Schon okay. Danke trotzdem. :)

Hier nochmal ne genauere Erklärung:

SQL-Code:
'SELECT * FROM Schuppen s'
+ ' INNER JOIN Schuppenanzahl a'
+ ' ON s.ID = a.ParentID'
+ ' WHERE (s.Stand LIKE ''%' + searchstring + '%'') GROUP BY a.ParentID, s.ID ORDER BY a.datum';
also so siehts aus. meine abfrage...

Schuppen:
12 [ID], Kartoffeln [Artikel]

Schuppenanzahl:
12 [ParentID], 20€ [Preis], 10.02.1988 [Datum]
12 [ParentID], 23€ [Preis], 20.02.1988 [Datum]

und ich möcht eben nur einen eintrag aus Schuppenanzahl haben und nicht beide...

So sieht mein aktueller versuch aus, als SubSelect. Geht nur leider nicht. :wall:
SQL-Code:
QHousehold.SQL.Text :=  'SELECT (SELECT * FROM Schuppen s'
+' WHERE (s.Stand LIKE ''%' + searchstring + '%'')),'
+' (SELECT TOP 1 preis FROM Schuppenanzahl WHERE ParentID = s.ID ORDER BY datum DESC) AS Preis,'
+' (SELECT TOP 1 datum FROM Schuppenanzahl WHERE ParentID = s.ID ORDER BY datum DESC) AS Datum'
+' FROM Schuppen;


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:03 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz