Zaehler in Abfrage

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

Eia
********
Beiträge: 2614
Registriert: Sa, 23.12.2006 07:40

Zaehler in Abfrage

Beitrag von Eia »

Kann man in einer Abfrage eine Zaehlerspalte generieren lassen?
Ich habe im Hilfetext dass hier gefunden:
SELECT COUNT(*) AS Anzahl
und in meine Abfrage eingebaut:
SELECT "COUNT(*)" AS "NR", "KDNR" FROM "Tabelle1" WHERE ....
und bekomme auch eine Spalte. Aber sie ist leer.
mfG
pmoegenb
********
Beiträge: 4330
Registriert: Di, 22.06.2004 12:02
Wohnort: 71134 Aidlingen
Kontaktdaten:

Re: Zaehler in Abfrage

Beitrag von pmoegenb »

Hallo Eia,

und wie siehts aus wenn Du die Anführungszeichen bei "COUNT(*)" weglässt ?

Count ist eine Aggregatfunktion von SQL und gibt die Anzahl der gefundenen Datensätze zurück.

Übrigens habe ich festgestellt, wenn Du SQL mittels Abfrage in SQL-Ansicht erstellen... bearbeitest, kannst Du die Anführungszeichen auch weglassen, die werden von Base an den erforderlichen Stellen hinzugefügt. Der Code

Code: Alles auswählen

SELECT COUNT(*) AS NR, FROM Tabelle1 WHERE ....
müsste deshalb zum Erfolg führen. Aber, Count can only be used as single column!
Gruß

Peter
---------------------------------------------------------------------------
Windows 7 Prof. 64-bit SP1, LibreOffice 4.3.6.2 und AOO 4.1.1
Eia
********
Beiträge: 2614
Registriert: Sa, 23.12.2006 07:40

Re: Zaehler in Abfrage

Beitrag von Eia »

Hallo Peter
pmoegenb hat geschrieben:Count can only be used as single column!
Ja, diese COUNT-Funktion ist offenbar nicht für das gedacht, wofür ich es wollte. Man kann damit die Anzahl der Datensätze ermitteln und ich wollte ja eine Zeilennummerierung.
Mhhh.
Etwas weiter oben im Hilfetext steht noch:
Wenn Sie andere Funktionen verwenden möchten, die nicht im Listenfeld aufgeführt werden, dann müssen Sie diese unter Feld eintragen, sie erscheinen dann automatisch in der Zeile Funktion
Gibt es auch eine Liste derjenigen Funktionen, die so angewendet werden können? Ich hab mal probiert:
SELECT ROW()
aber "function not supported, yet"
mfG
pmoegenb
********
Beiträge: 4330
Registriert: Di, 22.06.2004 12:02
Wohnort: 71134 Aidlingen
Kontaktdaten:

Re: Zaehler in Abfrage

Beitrag von pmoegenb »

Hallo Eia,

wenn Du mir im persönlichen Bereich Deine E-Mail-Adresse bekannt gibst, kann ich Dir eine PDF-Datei senden, die die möglichen Klauseln samt Beispiele für die geläufigen Datenbanken enthält.
Gruß

Peter
---------------------------------------------------------------------------
Windows 7 Prof. 64-bit SP1, LibreOffice 4.3.6.2 und AOO 4.1.1
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Zaehler in Abfrage

Beitrag von Barlee »

Hallo Eia,

wenn Du eine "eindeutige" Spalte in Deiner Tabelle hast, könntest Du folgendermaßen eine Nummerierung erhalten: (das Beispiel orientiert sich an einer eindeutigen Spalte "ID")

Code: Alles auswählen

Select Count (*) FROM [Deine_Tabelle] as X WHERE X.ID < [Deine_Tabelle].ID)+1 as lfd, ...
siehe auch:
viewtopic.php?f=8&t=13671&p=54963&hilit ... mer#p54963

Gruß Barlee
Eia
********
Beiträge: 2614
Registriert: Sa, 23.12.2006 07:40

Re: Zaehler in Abfrage

Beitrag von Eia »

Vielen Dank für den Tipp.
Leider kann ich das nicht auf meine Situation übertragen, bekomme stets die Meldung "ungültige Syntax".
Dazu muss ich sagen, dass ich ganz schwach in Sachen SQL bin und mich schon schwertue mit dem Anbringen der Anführungszeichen und Klammern an den richtigen Stellen.
Angenommen, ich habe eine Tabelle "Tabelle1", aus der ich das Feld "KDNR" in meine Abfrage übernehmen will, aber nur für die Sätze, bei denen das Feld "PLZ" zwischen "70000" und "79999" liegt.
Das Feld "KDNR" ist eindeutig, enthält aber Buchstaben (Geht das, oder muss es ein numerisches Feld sein? Könnte ich als Feld "ID" mit einem Zähler auch noch einfügen).
Wie müsste die Syntax da aussehen?
mfG
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Zaehler in Abfrage

Beitrag von komma4 »

nehme die Vergleichsbedingung BETWEEN

Code: Alles auswählen

... WHERE "KDNR" BETWEEN '70000' AND '79999'
War es das?
Eia
********
Beiträge: 2614
Registriert: Sa, 23.12.2006 07:40

Re: Zaehler in Abfrage

Beitrag von Eia »

Ne, nicht eigentlich. Das mit dem WHERE allein würde ich schon hinkriegen.
Die Frage ist, ob man einen Zähler als Zusatzspalte in die Abfrage bekommt.
Also wenn von 1000 Datensätzen durch WHERE-Einschränkung 100 übgrigbleiben, soll in der Abfrage eine zusätzliche Spalte mit einem Zähler von 1 bis 100 vorhanden sein.
mfG
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Zaehler in Abfrage

Beitrag von komma4 »

Einen Zähler bekomme ich über eine temporäre Tabelle so hin:

Code: Alles auswählen

SELECT name, mailorder_id, datum , ( SELECT COUNT(*) FROM mailorder "TEMPTAB" WHERE TEMPTAB.mailorder_id < WERTETAB.mailorder_id ) + 1 as Zaehler FROM mailorder "WERTETAB"
Hilft das?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Eia
********
Beiträge: 2614
Registriert: Sa, 23.12.2006 07:40

Re: Zaehler in Abfrage

Beitrag von Eia »

Ehrlich gesagt, verstehe ich nicht, was da abgeht.

Code: Alles auswählen

( SELECT COUNT(*) FROM mailorder "TEMPTAB" WHERE TEMPTAB.mailorder_id < WERTETAB.mailorder_id )
Wird hier eine temporäre Tabelle namens TEMPTAP erstellt? Und eine weitere mit Namen WERTETAB?
Und was bedeutet dabei TEMPTAB.mailorder_id?
Und WERTETAB.mailorder_id?
Und was wird warum um 1 erhöht?
mfG
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Zaehler in Abfrage

Beitrag von komma4 »

Nein, es wird keine Tabelle erstellt.
Die Namen in Anführungszeichen sind Aliasnamen.

Durch den SELECT in der Klammer werden die bereits ausgegebenen gezählt (plus Eins), und in der Spalte "Zaehler" geschrieben.

WERTETAB ist dann der Alias für die auszuwertende Tabelle...

Werde Licht?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Zaehler in Abfrage

Beitrag von Barlee »

Hallo Eia,
Die Frage ist, ob man einen Zähler als Zusatzspalte in die Abfrage bekommt.
Also wenn von 1000 Datensätzen durch WHERE-Einschränkung 100 übgrigbleiben, soll in der Abfrage eine zusätzliche Spalte mit einem Zähler von 1 bis 100 vorhanden sein.
Ja, das geht. Betrachte einmal die Ausgangstabelle "Tab_lfd":
Bild_0.jpg
Bild_0.jpg (6.17 KiB) 1159 mal betrachtet
Folgende Abfrage selektiert Datensätze mit der PLZ zwischen 71000 und 79100 und fügt ein zusätzliche Spalte "lfd" an die Ergebnistabelle an. Wichtig ist, dass die Einschränkung "between 71000 and 79100 " auch in der Unterabfrage angewendet wird:

Code: Alles auswählen

select 
"a"."ID",
"a"."KDNR",
"a"."PLZ",
"a"."lfd"
from

(
select 
"ID",
"KDNR",
"PLZ",
(
select 
count(KDNR) from "Tab_lfd" as "x" 
where x.PLZ between 71000 and 79100 
and "x"."KDNR" < "Tab_lfd"."KDNR"+1
) as "lfd"

from "Tab_lfd"

where "PLZ" between 71000 and 79100

) "a"
Das Ergebnis ist folgendes:
Bild_1.jpg
Bild_1.jpg (20.17 KiB) 1159 mal betrachtet
Das Feld "KDNR" ist eindeutig, enthält aber Buchstaben (Geht das, oder muss es ein numerisches Feld sein? ... )=
Das ist unerheblich - wie auch das Beispiel zeigt. Einziges "Problem" könnte sein, dass der Zähler sich an der alphabetischen Sortierung der KDNR orientiert. Somit wird zwar korrekt die Anzahl der Ergebnisdatensätze gezählt, der Zähler kann aber "durcheinander" sein.
Bild_2.jpg
Bild_2.jpg (6.43 KiB) 1159 mal betrachtet
In solchem Fall führt ein abschließendes .

Code: Alles auswählen

order by "lfd"
zum gewünschten Ergebnis.

Hoffe, Du kommst weiter...

Gruß Barlee
Eia
********
Beiträge: 2614
Registriert: Sa, 23.12.2006 07:40

Re: Zaehler in Abfrage

Beitrag von Eia »

Vielen Dank, dass Ihr Euch solche Mühe mit mir gebt.
Nachdem es leider immer noch nicht recht in meinen Kopf geht, was da passiert mit den verschachtelten SELECT's, und was "a" und "x" sind, habe ich es jetzt einfach abgetippt, die Namen stimmen ja überein, und siehe da - es funktioniert! Es scheint sich dabei um einen echten Kraftakt von OO zu handeln, dachte zuerst, das Programm wolle sich verabschieden, aber dann kam's doch noch.
Ich werd also nochmal drüber schlafen und mir alles nochmal in Ruhe ansehen und hoffen, dass der Groschen noch fällt.
mfG
Antworten