Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Hilfe bei einer SQL Abfrage für Access (https://www.delphipraxis.net/204135-hilfe-bei-einer-sql-abfrage-fuer-access.html)

schaumermal 27. Apr 2020 18:12

Datenbank: Access • Version: 2010 • Zugriff über: ADO

Hilfe bei einer SQL Abfrage für Access
 
Hallo zusammen,

haben wir hier einen Access Experten, der mir vielleicht bei folgendem SQL Problem helfen kann?

Ich habe 2 Tabellen:

Kunden:
KDNummer
Name


Vorgang:
KDNummer
VorgangNr


Nun möchte ich per SQL eine Abfrage erstellen die mir pro Kunde (aus Tabelle Kunde) die Anzahl der gefundenen Vorgänge (aus Tabelle Vorgang) liefert:

Also in etwa:
Müller|5
Maier|7
Schulze|3

Ich muss also die beiden Tabellen joinen UND aus der 2. Tabelle den Count von VorgangNr erhalten. :(
Kann mir hier jemand helfen?

Vielen Dank im voraus :-D

Chemiker 27. Apr 2020 18:52

AW: Hilfe bei einer SQL Abfrage für Access
 
Hallo,

hier mal ein Link vielleicht ist was brauchbares dabei:
https://www.bing.com/videos/search?q...F&&FORM=VRDGAR

Bis bald Chemiker

Delphi.Narium 27. Apr 2020 18:55

AW: Hilfe bei einer SQL Abfrage für Access
 
SQL-Code:
select k.name, count(*) as anzahl
from kunden k
inner join vorgang v
on k.kdnummer = v.kdnummer
group by k.name
order by k.name
Aber: Mehrere Kunden gleichen Namens können hierbei aber nicht mehr auseinander gehalten werden.

Bei der Ausgabe wäre es besser, auch die Kundennummer mit auszugeben:
SQL-Code:
select k.kdnummer, k.name, count(*) as anzahl
from kunden k
inner join vorgang v
on k.kdnummer = v.kdnummer
group by k.kdnummer, k.name
order by k.name, k.kdnummer
Achso: ungetestet hingedaddelt.

schaumermal 27. Apr 2020 19:21

AW: Hilfe bei einer SQL Abfrage für Access
 
Hi,

Sorry ich hatte die entscheidende Information gar nicht gegeben :cry:

In der 2. Tabelle kann die Vorgangsnummer für einen Kunden mehrfach vorkommen vorkommen.
Ich möchte aber NUR die Anzahl der unterschiedlichen Vorgangsnummern pro Kunde haben (daher dinstinct) und NICHT die Gesamtanzahl.

Hast Du dafür auch eine Lösung?

jobo 27. Apr 2020 21:18

AW: Hilfe bei einer SQL Abfrage für Access
 
Im Prinzip geht es so:

Delphi-Quellcode:
select custno,
       count(distinct actionno) as actionnocount
  from countcustnoactionno
 group by custno
Ich weiß nicht, ob Access das kann.

Wenn es in Access nicht geht, musst Du die Schritte unterteilen und erst die eindeutigen Vorgänge selektieren und dann zählen, also 2 SQL verschachteln.

p80286 27. Apr 2020 21:26

AW: Hilfe bei einer SQL Abfrage für Access
 
Falls es nicht klappt versuch es mit [DBName].[FeldName]. Access ist da manchmal eigen.

Gruß
K-H

schaumermal 28. Apr 2020 07:50

AW: Hilfe bei einer SQL Abfrage für Access
 
Zitat:

Zitat von jobo (Beitrag 1462989)
Im Prinzip geht es so:

Delphi-Quellcode:
select custno,
       count(distinct actionno) as actionnocount
  from countcustnoactionno
 group by custno
Ich weiß nicht, ob Access das kann.

Wenn es in Access nicht geht, musst Du die Schritte unterteilen und erst die eindeutigen Vorgänge selektieren und dann zählen, also 2 SQL verschachteln.

Genau darum geht es mir ja. Ich bekommen diese Verschachtelung mit meinen oben genannten Tabellen nicht hin :(

p80286 28. Apr 2020 09:05

AW: Hilfe bei einer SQL Abfrage für Access
 
Zitat:

Zitat von schaumermal (Beitrag 1462997)
Genau darum geht es mir ja. Ich bekommen diese Verschachtelung mit meinen oben genannten Tabellen nicht hin :(

Und was heißt das konkret?
Gibt es eine Fehlermeldung?

Gruß
K-H

markus888 28. Apr 2020 09:33

AW: Hilfe bei einer SQL Abfrage für Access
 
Code:
SELECT k.kdnummer
   ,k.name
   ,V.anzahl
FROM kunden k
INNER JOIN (
   SELECT kdnummer
      ,Count(*) AS Anzahl
   FROM vorgang
   GROUP BY kdnummer
   ) V ON V.kdnummer = k.kdnummer
LG M

schaumermal 28. Apr 2020 10:00

AW: Hilfe bei einer SQL Abfrage für Access
 
@markus888

Vielen Dank für das SQL Statement.
Jedoch wird hierbei nicht berücksichtigt, dass ich NUR die Anzahl der unterschiedlichen Vorgangsnummern (also einen distinct count) pro Kunde haben möchte und NICHT die Gesamtanzahl.

Delphi.Narium 28. Apr 2020 10:23

AW: Hilfe bei einer SQL Abfrage für Access
 
Ich verstehe Deine Aufgabenstellung nicht mehr, könntest Du sie bitte nocheinmal als komplette Frage, möglichst präzise, ausformulieren?
SQL-Code:
select k.kdnummer, k.name, count(*) as anzahl from kunden k,
(
  select distinct kdnummer, vorgangnr from vorgang
) v
where k.kdnummer = v.kdnummer
group by k.kdnummer, k.name
order by k.kdnummer, k.name
Keine Ahnung, ob Access mit dieser Syntax zurechtkommt (vermutlich aber ja).

schaumermal 28. Apr 2020 11:21

AW: Hilfe bei einer SQL Abfrage für Access
 
Aufgabenstellung:

Ich habe 2 Tabellen (Kunden und Vorgang)

Kunden:
KDNummer
Name


Vorgang:
KDNummer
VorgangNr


Nun möchte ich per SQL eine Abfrage erstellen die mir pro Kunde (aus Tabelle Kunde) die Anzahl der gefundenen Vorgänge (aus Tabelle Vorgang) liefert. Jedoch möchte ich aus der Tabelle Vorgang nur die Anzahl der unterschiedlichen Vorgangsnummern haben. Mehrfach vorkommende Vorgangsnummern sollen nur einmal (distinct) gezählt werden:

Daten in der Tabelle
Tabelle Vorgang
Kd.-Nr. | Vorgang
4711 | 1
4711 | 2
0815 | 4
4711 | 3
4711 | 1
0815 | 4
4711 | 2


Als Ergebnis wünsche ich mir hier
4711 | 3
0815 | 1

Ich hoffe, so ist es verständlich :-D


EDIT:
Deine obige Lösung erfüllt bereits meine Anforderung.
Vielen Dank!

Delphi.Narium 28. Apr 2020 11:26

AW: Hilfe bei einer SQL Abfrage für Access
 
Sollte damit gehen:
SQL-Code:
select k.kdnummer, count(*) as anzahl from kunden k,
(
  select distinct kdnummer, vorgangnr from vorgang
) v
where k.kdnummer = v.kdnummer
group by k.kdnummer
order by k.kdnummer

Ghostwalker 28. Apr 2020 11:58

AW: Hilfe bei einer SQL Abfrage für Access
 
Code:
SELECT K.*,
       count(v.vorgang)
FROM Kunde K
LEFT JOIN VORGANG V ON (V.KdNr = K.KdNr)
ORDER BY k.kdnr;
So sollte es auch funktionieren. :)

schaumermal 28. Apr 2020 12:09

AW: Hilfe bei einer SQL Abfrage für Access
 
Hi,

leider erfüllt dieses Statement nicht die Bedingung, dass die Vorgangsnummern pro Kunde nur einmal gezählt werden sollen.
Ungeachtet also ob die Vorgangsnummer mehrfach vorkommt, darf er nur einmal zählen :|


Zitat:

Zitat von Ghostwalker (Beitrag 1463028)
Code:
SELECT K.*,
       count(v.vorgang)
FROM Kunde K
LEFT JOIN VORGANG V ON (V.KdNr = K.KdNr)
ORDER BY k.kdnr;
So sollte es auch funktionieren. :)



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