Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
SQL-Statement spezielle Gruppierung (MySQL und DB2)
be4all
myCSharp.de - Member



Dabei seit:
Beiträge: 66

Themenstarter:

SQL-Statement spezielle Gruppierung (MySQL und DB2)

beantworten | zitieren | melden

Hallo,

ich möchte in meinen Datenbanken eine "spezielle" Gruppierungsabfrage machen (ähnlich wie ein KgV). Dazu habe ich bspw. folgende Datensätze:

tbl_Person
ID / Name
0 / Hans
1 / Tom
2 / Marta
3 / Norbert


tbl_Auftrag
Auftragsnr / Person
1000 / 0
1000 / 1
1000 / 3
2010 / 1
2010 / 2
2010 / 3
3015 / 1
3015 / 3
4540 / 0
4540 / 1
4540 / 2
4540 / 3

Nun möchte ich mit einem SQL Statement herausfinden, welche Personen bei allen aufgelisteten Aufträgen beteiligt waren. In diesem Falle also Person 1 und 3:

An Auftrag 1000 ist Person 1 und 3 beteiligt
An Auftrag 2010 ist Person 1 und 3 beteiligt
An Auftrag 3015 ist Person 1 und 3 beteiligt
An Auftrag 4540 ist Person 1 und 3 beteiligt


Ich möchte also Personen 1 und 3 als Datensätze erhalten. Hat jemand eine Idee?


Danke im Voraus!
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von be4all am .
private Nachricht | Beiträge des Benutzers
Viper78
myCSharp.de - Member



Dabei seit:
Beiträge: 162
Herkunft: Dortmund

beantworten | zitieren | melden

SELECT
 A.Auftragsnr
 P.Name
FROM
 tbl_Person P,
 tbl_Auftrag A
where P.ID = A.Person 
 AND A.Auftragsnr = 1000
Ergebniss:
Auftragsnr | Name
1000       | Hans
1000       | Tom
1000       | Norbert

Ich hoffe das meintest du.

MfG
Björn
Das Leben ist schön!
private Nachricht | Beiträge des Benutzers
be4all
myCSharp.de - Member



Dabei seit:
Beiträge: 66

Themenstarter:

beantworten | zitieren | melden

Nein, Hans darf nicht im Ergebnis enthalten sein ...
private Nachricht | Beiträge des Benutzers
Viper78
myCSharp.de - Member



Dabei seit:
Beiträge: 162
Herkunft: Dortmund

beantworten | zitieren | melden

Oh, sorry hatte dich miss verstanden.
SELECT 
 A.Auftragsnr 
FROM 
 tbl_Person P, 
 tbl_Auftrag A 
where P.ID = A.Person 
 AND  P.ID in (1,3)
group by  A.Auftragsnr 
having count(*) = 2

Das liefert dir die Auftragsnummer, in welchem Benutzer 1 und 3 gemeinsamm vorhanden sind.
Damit kannst du dann ja weiter Joinen.

MfG
Björn
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Viper78 am .
Das Leben ist schön!
private Nachricht | Beiträge des Benutzers
witte
myCSharp.de - Member



Dabei seit:
Beiträge: 955

beantworten | zitieren | melden

Wenn es vier verschiedene Aufträge gibt, muss die Person in der tbl_Auftrag vier Zeilen besitzen. Also einmal DISTINCT Auftragsnummer zählen und dann die Zeilen gruppiert nach der Person zählen. Das geht in einem Statement wenn DISTINCT Auftragsnummer als Where-Subselect gezählt wird.
private Nachricht | Beiträge des Benutzers
be4all
myCSharp.de - Member



Dabei seit:
Beiträge: 66

Themenstarter:

beantworten | zitieren | melden

@Viper: danke für das Beispiel. Ich will die Abfrage jedoch allgemeingültig machen und nicht konkret für dieses Beispiel ..

@witte: kannst du bitte ein Beispielstatement schreiben?
private Nachricht | Beiträge des Benutzers
Viper78
myCSharp.de - Member



Dabei seit:
Beiträge: 162
Herkunft: Dortmund

beantworten | zitieren | melden

Witte hat genau das hat das beschrieben was ich dir als Beispiel geschrieben habe.
Das Leben ist schön!
private Nachricht | Beiträge des Benutzers
witte
myCSharp.de - Member



Dabei seit:
Beiträge: 955

beantworten | zitieren | melden

Ich dachte eher so:

SELECT Person,COUNT(*) AS anzahl
FROM tbl_Auftrag
GROUP BY Person
HAVING COUNT(*) = (SELECT COUNT(*) FROM (SELECT DISTINCT Auftragsnr FROM tbl_Auftrag))
Ich weiß nicht ob Deine mysql-Version dynamic views unterstützt, probier mal.
@Viper78: P.ID in (1,3) hat er beispielhaft gemeint. Er will Personen haben die an allen Aufträgen beteiligt sind.
private Nachricht | Beiträge des Benutzers
be4all
myCSharp.de - Member



Dabei seit:
Beiträge: 66

Themenstarter:

beantworten | zitieren | melden

Das funktioniert leider nicht :(
private Nachricht | Beiträge des Benutzers
witte
myCSharp.de - Member



Dabei seit:
Beiträge: 955

beantworten | zitieren | melden

Mit dieser Bemerkung wird Dir niemand helfen können, Du solltest schon beschreiben welche Fehlermeldung/Ausgaben erscheinen.
Außerdem habe ich den Weg nur prinzipiell gezeigt, Du müsstest das noch auf Mysql/DB2 adaptieren.
private Nachricht | Beiträge des Benutzers
be4all
myCSharp.de - Member



Dabei seit:
Beiträge: 66

Themenstarter:

beantworten | zitieren | melden

Naja keine Fehlermeldung, aber die Ergebnistabelle ist leer unter bestimmten Umständen ... z.B. wenn es immer identisch viele Personen gibt zu einem Auftrag ...
private Nachricht | Beiträge des Benutzers