Autor Beitrag
D. Annies
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: Sa 27.05.06 08:22 
Hi, Delpher,

Wie kann ich aus einer DBTabelle mit den Feldern WPK1, WPK2, WPK3
(WPK = Wahlpflichtkurs) die in allen drei Spalten einzigartigen Inhalte ausgegeben bekommen? Es gibt, sagen wir mal, 50 verschiedene WPK's. Davon werden aber nur 28 als erste Wahl genommen und 12 andere erst als zweite Wahl. Ich brauche also eine Gesamtliste aller genommenen WPK's, unabhängig, ob sie als erster, zweiter oder dritter WPK gewählt wurden.

Meine Idee select distinct WPK1, WPK2, WPK3 from Tab funzt nicht so, wie gewünscht.

Wer weiß denn Rat? Vielen Dank für Hilfe, sagt

Detlef Annies
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Sa 27.05.06 09:28 
ausblenden SQL-Anweisung
1:
2:
3:
4:
5:
6:
7:
select distinct wpk from
  (select wpk1 as wpk from tabelle 
   union
   select wpk2 from tabelle 
   union
   select wpk3 from tabelle 
   )

_________________
Na denn, dann. Bis dann, denn.
D. Annies Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: Sa 27.05.06 10:58 
Hi, alzaimer,

du bist der BRINGER!
(gut, dass du dich an diesen Befehl noch erinnern konntest ... :D )

Ich danke dir!

Gruß aus Lübeck,
Detlef
D. Annies Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: Sa 27.05.06 13:31 
Autsch,

leider funzt der Befehl nicht. Fehlermeldung:
Ungültiges Schlüsselwort select in Zeile 1

Gruß, Detlef
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Sa 27.05.06 13:51 
Im Statement waren 2 kleine Flüchtigkeitsfehler, so ist es richtig:

ausblenden SQL-Anweisung
1:
2:
3:
4:
5:
6:
7:
select distinct wpk from
  (select wpk1 as wpk from tabelle 
   union
   select wpk2 as wpk from tabelle 
   union
   select wpk3 as wpk from tabelle 
   )


Dein Problem liegr aber möglichweise am verwendeten Datenbanksystem. Nicht alle DBMS unterstützen derived-queries.

Was für ein DBMS setzt du ein?

_________________
Markus Kinzler.
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Sa 27.05.06 14:35 
Bei MSSQL muss man den Spaltennamen einer UNION nur im ersten SELECT angeben, dachte ich zumindest.

Bei MSSQL (eben ausprobiert) ist das distinct übrigens bei einem union implizit, wird also sowieso ausgeführt. Mit anderen Worten: Das hier reicht:
ausblenden SQL-Anweisung
1:
2:
3:
4:
5:
select wpk1 as wpk from Tabelle
union
select wpk2 from Tabelle
union
select wpk3 from Tabelle

_________________
Na denn, dann. Bis dann, denn.
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Sa 27.05.06 14:47 
In MSSql kenn ich mich nicht so aus. Meine Variante sollte eigentlich auf allen DBMS gehen, soweit sie derived-queries unterstützen, was hier nicht der Fall zu sein scheint.

_________________
Markus Kinzler.
D. Annies Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: Sa 27.05.06 16:14 
Hallo Markus und alzaimer,

in der Tat musste ich die Klammer weglassen, an das andere dachte ich auch schon.
Eure Ersatzvorschläge werde ich auch mal durchlaufen lassen.

Eine Zusatzfrage habe ich, sonst muss ich evtl. einen neuen Thread machen:
Wie kann ich die Anzahl der Personen, die den jeweiligen WPK gewählt haben, zählen?

Das DataBaseManagementSystem kenne ich nicht, ich schreibe den Befehl direkt in den Quellcode, bzw. lese ihn in den Inputstring aus einer Textdatei. Wer weiß den damit, was ich für ein DBMS habe?

Vielen Dank für weitere Hilfe und Grüße aus Lübeck,
Detlef
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Sa 27.05.06 16:49 
DBMS: MSSql, FireBird, PostGres, DB2, Oracle, Paradox, usw.

So oder ähnlich sollte die Erweiterung aussehen:

ausblenden SQL-Anweisung
1:
2:
3:
4:
5:
6:
7:
select wpk, sum(wpk) from
(
  select wkp1 as wpk, count(wpk1) as anz from tabelle group by wpk1
  union
  select wkp2 as wpk, count(wpk2) an anz from tabelle group by wpk2
  union
  select wkp3 as wpk, count(wpk1) as anz from tabelle  group by wpk3) group by wpk

_________________
Markus Kinzler.
D. Annies Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: So 28.05.06 09:46 
Hi, Markus,

sorry, dass ich erst jetzt antworten kann, dein Befehl funzt so (oder so ähnlich) ganz gut. Ich muss allerdings die Klammern weglassen.

Ich sehe jetzt: Es gibt 4 Teilnehmer, die Delphi als WPK1 gewählt haben und 8 TN als WPK2 und 6 TN als WPK3.

Ich möchte sehen: es sind 18 TN, die Delphi (oder einen anderen WPK) überhaupt gewählt haben:

Geht das auch?

Grüße von
Detlef
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: So 28.05.06 10:05 
Welche Klammer hast du weggelassen? welches DBMS setzt du ein?
Eigentlich sollte meine Abfrage einen Dataensatz pro WPK bringen.

_________________
Markus Kinzler.
D. Annies Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: So 28.05.06 10:13 
Hi, Markus,

ich lasse aus deinem Befehl die Klammer aus Zeile 2 und aus Zeile 7 weg, sonst bekomme ich eine Fehlermeldung, die Klammer vor select wird dann angemeckert.

Mein DBMS ist dann wohl die BDE.

Grüße aus HL,

Detlef
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: So 28.05.06 10:28 
Ich vermute mal das die BDE keine derived-queries kann :-(

Trotzdem hier mal eine verkürzte Lösung.

ausblenden SQL-Anweisung
1:
2:
3:
4:
5:
6:
7:
8:
select wpk, count(wpk) from
(
  select wpk1 as wpk from tabelle
  union
  select wpk2 as wpk from tabelle
  union
  select wpk3 as wpk from tabelle
group by wpk

_________________
Markus Kinzler.
D. Annies Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: So 28.05.06 11:50 
Hi, Markus,

danke für deine schnelle Antwort!
Ist wohl leider so, dass die BDE das nicht kann :cry:

Muss ich mir halt nacheinander die Informationen besorgen!

Grüße von
Detlef Annies