Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Zählen in SQL (https://www.delphipraxis.net/56322-zaehlen-sql.html)

CG2003 3. Nov 2005 21:50

Datenbank: MS SQL Server • Version: 2000 • Zugriff über: Über Domäne auf Win 2003 Server SBS

Zählen in SQL
 
Hallo, ich habe folgende Abfrage (es handelt sich um eine Ersatzteilverwaltung):

SQL-Code:
SELECT * FROM Buchungen WHERE PartDatum BETWEEN '06.10.2005' AND '08.10.2005'
AND PartNr = '10193722' AND PartStatus = 'Abbuchung'
So, das funktioniert soweit ganz gut, nur wie kann ich die Vorkommnisse im
Ergebnis, welches durch diese Abfrage entsteht zählen?

Also, wenn mir die SQL-Ausgabe beispielsweise 10 Ergebnisse/Vorkommnisse
anzeigt, das ich ermitteln kann, das es wirklich sind?

Ich habe gehört, das es mit dem Befehl
SQL-Code:
COUNT
gehen soll,
doch egal wo ich diesen Befehl in der o.a. Abfrage eingefügt habe, gab es
einen Fehler seitens meines SQL-Servers.

Ich hoffe ihr könnt mir helfen.



Viele Grüße aus Hamburg...

marabu 3. Nov 2005 22:02

Re: Zählen in SQL
 
Hallo.

In SQL kannst du COUNT(*) anstatt * verwenden, beim Arbeiten mit einer Query (ADO) hilft dir die Eigenschaft RowsAffected weiter.

Grüße vom marabu


PS: bei den Metadaten zu deinem thread erwarten wir bei "Zugriff über" die Angabe des Komponenten-Sets, mit dem du arbeiten möchtest...

CG2003 3. Nov 2005 22:10

Re: Zählen in SQL
 
Super! Vielen Dank, jetzt funktioniert es! :thumb:

Aber: Da mehrere Buchungen an einem Tag für die gleiche Ersatzteilnr. vorkommen, gibt es da die Möglichkeit, das Ergebnis so darzustellen, das ich in der 1. Spalte die einzelne Ersatzteilnr. habe,
und in der zweiten Spalte den errechneten/gezählten Wert? Beispielsweise in einem Grid oder TListView?
Das heißt, das in der Ausgabe nur einmal die Nummer vorkommt, aber die Abbuchungen gezählt werden und hinter
(in der nächsten Spalte) der Nummer der Wert steht???

Gibt es eigentlich eine Art Befehlsreferenz für SQL im Internet oder als eBook? Quasi kostenlos? :gruebel:

Bezüglich der Metadaten:
Tut mir leid, das wusste ich nicht :shock: , werde ich aber in Zukunft berücksichtigen! :)

Sir Rufo 3. Nov 2005 22:53

Re: Zählen in SQL
 
Zitat:

Zitat von CG2003
Gibt es eigentlich eine Art Befehlsreferenz für SQL im Internet oder als eBook? Quasi kostenlos? :gruebel:

kuckst Du hier mal ...

MySQL 4.0 Doku (deutsch) als PDF

aber immer bedenken, bei SQL gibt es Basis-Funktionen und dann auch noch Dialekt, will heissen, was auf Server/Datenbank von Hersteller A funktioniert, muss nicht unbedingt bei Hersteller B auch laufen.

Beispiel:
Bei MySQL gibt es den Befehl REPLACE (genialer Befehl, der arbeitet wie ein INSERT wenn die Zeile nicht existiert (laut Primärschlüssel) und wie UPDATE wenn die Zeile schon existiert).

Oder:
Zum Lesen der ersten 100 Zeilen heisst es bei MS-SQL "SELECT TOP 100 * FROM table;" bei MySQL "SELECT * FROM table LIMIT 100;"

Aber da man beim Start in die SQL-Welt sich erst mal für ein Datenbank-System entscheided sind die Unterschiede erst mal nicht so entscheidend, allerdings die Doku sollte zu dem DB-System passen :wink:

cu

marabu 4. Nov 2005 06:28

Re: Zählen in SQL
 
Hallo Sebastian,

du kannst eine statistische Auswertung über die SQL Aggregat-Funktionen erstellen. Mit dem folgenden Statement erhältst du eine Übersicht der Artikelabgänge in einem bestimmten Zeitraum. Die Ausdrücke mit dem Doppelpunkt sind Parameter, die du in deinem Programm ersetzen kannst - so ist das Statement variabel einsetzbar.

SQL-Code:
SELECT PartNr, Count(*) as Anzahl, Sum(Wert) as Wert
FROM Buchungen
WHERE PartDatum BETWEEN :begin AND :end AND PartStatus = :status
GROUP BY PartNr
ORDER BY PartNr
Zum MS SQL Server 2000 gehört eine Online Dokumentation, in der du die Referenz für T-SQL findest - das ist die SQL Implementierung von MS (Sybase).

Grüße vom marabu

Garby 4. Nov 2005 07:51

Re: Zählen in SQL
 
@marabu

In allen mir bekannten DBMS führt
SQL-Code:
group by
automatisch zu einer Sortierung.
Also wäre ein zusätzlicher Aufruf von
SQL-Code:
order by
sinnlos und verschwendet nur Prozessorzeit.

Ich kenn natürlich nicht alle Systeme, also selber ausprobieren :wink:

ozz 4. Nov 2005 14:26

Re: Zählen in SQL
 
Zitat:

Zitat von Garby
@marabu

In allen mir bekannten DBMS führt
SQL-Code:
group by
automatisch zu einer Sortierung.
Also wäre ein zusätzlicher Aufruf von
SQL-Code:
order by
sinnlos und verschwendet nur Prozessorzeit.

Ich kenn natürlich nicht alle Systeme, also selber ausprobieren :wink:

Ich wollte nur kurz noch eine Anmerkung machen. Eine Sortierung erfolgt bei einem group by nicht automatisch (explizit nur Oracle). Jedoch selbst wenn das so sein sollte, der SQL Optimizer sollte das dann rausfiltern, das ist dessen Job :angel2: . Dieser lauft immer und verschwendet Prozessorzeit..... :warn:

CG2003 4. Nov 2005 16:13

Re: Zählen in SQL
 
Zitat:

Zitat von marabu
SQL-Code:
SELECT PartNr, Count(*) as Anzahl, Sum(Wert) as Wert
FROM Buchungen
WHERE PartDatum BETWEEN :begin AND :end AND PartStatus = :status
GROUP BY PartNr
ORDER BY PartNr

Vielen Dank für das SQL-Statement, doch eins verstehe ich nicht.
Was genau meinst Du mit "Anzahl" und was mit "Wert"???
Das sind Typen/Spalten, die ich in meiner Tabelle doch gar nicht habe...
Oder bringe ich da jetzt was durcheinander???

marabu 4. Nov 2005 16:24

Re: Zählen in SQL
 
Lege das bitte nicht auf die Goldwaage - ich wollte dir nur möglichst viel in einem einzigen Statement zeigen. "Anzahl" ist ja nur eine Umbenennung und wenn es "Wert" bei dir nicht gibt, dann schmeiß es einfach wieder raus. Hauptsache du hast jetzt eine Idee, wie du weiter machen kannst.

Freundliche Grüße vom marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:23 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