vermutlich verschachtelte select count abfrage

Ostseebengel74

Benutzer
Beiträge
11
Hallo

Ich suche mir seit Tagen einen Wolf und komme mit meinem Problem nicht weiter.


Folgendes:

Ich arbeite mit visual studio unter VBA...
Mein Programm greift auf eine LOKALE SQL DB zu die aus 3 Tabellen besteht.
nehmen wir mal nur 2 der drei...



Tabelle 1 = Kunden
Id,Name,Info1,Info2,Info3,Strasse,PLZ,Ort,Zusatz1,Zusatz2,Zusatz3

Tabelle 2 = Standorte
Id,IdFK1,StandortName,Info1,Info2,Info3,Strasse,PLZ,Ort,Zusatz1,Zusatz2,Zusatz3



Mein Programm arbeitet mit 2 Forms in denen ich mir die Daten entsprechend in einem DataGridView anzeigen lassen.

Zuerst wähle ich den Kunden aus der eine Id hat die fortlaufend und einmalig ist.
Die Kunden Daten werden in einem DataGridView dargestellt.

Dann gehe ich über einen Button zu den Standorten in dem sich wiederum ein DataGridView befindet. Sollte Kunde 1 bereits 5 Standorte haben, dann werden mir
im "Standor"t Form nur die Standorte angezeigt die dieser Kunde auch wirklich hat. Das ereiche ich durch die Zuweisung IdFK1 und eine einfache WHERE abfrage via SQL.
Ich speicher praktisch die Id des Kunden in der Spalte IdFK1 der Standorte.

Alles kein Hexenwerk...



Nun mein Problem:


Ich möchte in Form1 eine SQL Abfrage starten die mir alle Kundendaten im GridView anzeigt und eine extra Spalte in der man sieht wie viele Standorte dieser Kunde hat.
Das Zählen der Einträge mache ich über SELECT COUNT(IdFK1) AS AnzahlStandorte From Standorte Where (IdFK1 = @Id)
Jetzt möchte ich aber eigenlich eine SELECT (*) FROM Kunde,Standorte WHERE (SELECT COUNT(IdFK1) AS AnzahlStandorte FROM Standorte WHERE (IdFK1 = @Id)) haben.

Es soll mir praktisch Tabelle 1 = Kunden angezeigt werden und dahinter jeweils die Anzahl seiner Standorte.

Mir ist bewusst das meine Syntax nicht Richtig ist, aber wie löse ich das Problem. Suche mir schon seit Tagen einen Wolf.

Es wäre nett wenn mir jemand die richtige Befehlsstruktur aufschreiben könnte das ich da mal endlich weiter komme...





Danke Euch
 
Werbung:

Walter

Administrator
Teammitglied
Beiträge
459
Arbeitest Du wirklich mit MySql oder MariaDB? In diesem Unterforum hast Du Deine Frage reingestellt.
Hast Du Dich schon damit beschäftigt wie Joins funktionieren? Besser als IdFK1 = @Id ist die Benutzung von Inner Join/Outer Join-Syntax.
 

Ostseebengel74

Benutzer
Beiträge
11
Es ist eine ms SQL Datenbank die lokal auf dem Rechner gespeichert ist... da läuft nix virtuelles oder so... sorry wenn ich den Eintrag falsch eingestellt habe
 

akretschmer

Datenbank-Guru
Beiträge
9.933
Die Tabellenstruktur ist schlecht, Info1 bis Info3 und Zusatz1 bis Zusatz3 - was macht Du, wenn du weitere Info's und Zusätze hast? Das skaliert nicht.

Zu Deiner Frage:

Code:
edb=# create table master (id int generated always as identity primary key, name text);
CREATE TABLE
edb=*# create table detail (id int generated always as identity, fk_master int references master, name text);
CREATE TABLE
edb=*# insert into master (name) values ('name 1');
INSERT 0 1
edb=*# insert into master (name) values ('name 2');
INSERT 0 1
edb=*# insert into detail (fk_master, name) values (1, 'detail 1');
INSERT 0 1
edb=*# insert into detail (fk_master, name) values (1, 'detail 2');
INSERT 0 1
edb=*# select master.*, count(detail.*) from master left join detail on master.id=detail.fk_master group by master.id, master.name;
 id |  name  | count
----+--------+-------
  2 | name 2 |     0
  1 | name 1 |     2
(2 rows)
 

Ostseebengel74

Benutzer
Beiträge
11
Schlecht??? Was ist daran schlecht? Momentan benutzen wir noch weniger Infos... die Info Einträge 1 bis 3 und Zusätze 1 bis 3 habe ich aus freien Stücken rangehängt weil in unseren Berichten nichts anderes benötigt wird.

Aber sei es drum man lern ja nie aus.

Dein Quell Code erstellt ja zwei neue Tabellen, Richtig?


Mein Gedanke war folgender:

Ich habe eine Tabelle Namens Kunden erstellt

Diese Tabelle frage ich mit>>> SELECT Id, Kunde, Info1, Info2, Info3, Strasse, PLZ, Ort, Zusatz1, Zusatz2, Zusatz2 From Kunden<<< und Fülle damit ein DataGrid meiner VBA Form

Die Tabelle Standorte frage ich auch so ab >>>SELECT Id,IdFK1, Standort, Info1, Info2, Info3, Strasse, PLZ, Ort, Zusatz1, Zusatz2, Zusatz2 From Standorte<<< und Fülle damit ein DataGrid meiner VBA Form>>

Jetzt möchte ich nur eine Abfrage erstellen die mir Alle Werte der Kunden Anzeigt und dazu passend in der Zeile des Kunden die Anzahl seiner Standorte.

Dia Abfrage der Anzahl ist ja recht Simpel >>>SELECT COUNT(IdFK1) AS AnzahlStandorte FROM Standorte WHERE (IdFK1 =@IdvomKunden)

Ich möchte praktisch Anweisung 1 mit Anweisung 3 verknüpfen... Geht sowas???



Ich bedanke mich (schreibe während der Fahrt aus dem Auto) Sorry für Tipp Fehler
 

Ostseebengel74

Benutzer
Beiträge
11
Gut meine Tabellen Struktur is schlecht... kann ich mit leben

Ich begreife dein Script nicht... Erstellt das eine neue Tabelle? oder fixt das die alte? oder is das nur die Abfrage die ich mir wünchte? Ich verstehe da nur das Create und das sagt mir das da was neues entsteht.


Merci
 

akretschmer

Datenbank-Guru
Beiträge
9.933
ach, im übrigen: mein Text ist eine interaktive Kommunikation mit der Datenbank. Diese präsentiert mir einen Eingabeprompt, dort gebe ich was ein, lasse es die DB ausführen und mir anzeigen, ob und wie meine Eingabe ausgeführt wurde.
Das alles 1:1 zu kopieren ist, ähm, falsch.
 

Ostseebengel74

Benutzer
Beiträge
11
SELECT COUNT(Auftraggeber.Id) AS Anzahl, Auftraggeber.Id, Kunden.IdFK1, Auftraggeber.Auftraggeber, Auftraggeber.Info1, Auftraggeber.Info2, Auftraggeber.Info3, Auftraggeber.Strasse, Auftraggeber.PLZ, Auftraggeber.Ort,
Auftraggeber.Zusatz1, Auftraggeber.Zusatz2, Auftraggeber.Zusatz3
FROM Auftraggeber LEFT OUTER JOIN
Kunden ON Kunden.IdFK1 = Auftraggeber.Id
GROUP BY Auftraggeber.Id, Kunden.IdFK1, Auftraggeber.Auftraggeber, Auftraggeber.Info1, Auftraggeber.Info2, Auftraggeber.Info3, Auftraggeber.Strasse, Auftraggeber.PLZ, Auftraggeber.Ort, Auftraggeber.Zusatz1, Auftraggeber.Zusatz2,
Auftraggeber.Zusatz3


damit geht es so wie ich es wollte...
 
Werbung:
Oben