AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Access Group by

Ein Thema von Jonas · begonnen am 28. Dez 2008 · letzter Beitrag vom 31. Dez 2008
Antwort Antwort
Seite 1 von 3  1 23   
Jonas

Registriert seit: 6. Feb 2005
266 Beiträge
 
Delphi 2007 Professional
 
#1

Access Group by

  Alt 28. Dez 2008, 22:17
Datenbank: Access • Version: 2007 • Zugriff über: jet
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?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.859 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Access Group by

  Alt 28. Dez 2008, 22:27
Wenn Access einen Subselect mit mehreren Werten unterstützt:
Select s.*, (select Top 1 * from Schuppenanzahl a where ParentID = s.ID order by ID desc) ...
Markus Kinzler
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Access Group by

  Alt 28. Dez 2008, 22:42
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)
  Mit Zitat antworten Zitat
Jonas

Registriert seit: 6. Feb 2005
266 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Access Group by

  Alt 29. Dez 2008, 12:29
Zitat von mkinzler:
Wenn Access einen Subselect mit mehreren Werten unterstützt:
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.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.859 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Access Group by

  Alt 29. Dez 2008, 12:33
Zitat:
Da bekomm ich leider den Fehler:...
Hatte ich befürchtet. Brauchst du alle Werte der 2. Tabelle?
Markus Kinzler
  Mit Zitat antworten Zitat
Jonas

Registriert seit: 6. Feb 2005
266 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Access Group by

  Alt 29. Dez 2008, 12:43
Eigentlich brauch ich nur datum und preis.
Habe es auch schon mit (SELECT Top 1 datum, preis FROM ... versucht, hat aber nicht geklappt, selber fehler.
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Access Group by

  Alt 29. Dez 2008, 15:05
Zitat von Jonas:
... Es soll jedoch nur der letzte Eintrag jeweils von *Schuppenanzahl* angezeigt werden.
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 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
  Mit Zitat antworten Zitat
Jonas

Registriert seit: 6. Feb 2005
266 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Access Group by

  Alt 29. Dez 2008, 15:40
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.
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Access Group by

  Alt 29. Dez 2008, 16:22
Ich verstehe deine Tabellen- und Daten-Struktur leider nicht, sorry. Vielleicht kann dir ja jemand anderes helfen.
  Mit Zitat antworten Zitat
Jonas

Registriert seit: 6. Feb 2005
266 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Access Group by

  Alt 30. Dez 2008, 02:44
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.
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;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:46 Uhr.
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