Autor Beitrag
Rupert
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 47
Erhaltene Danke: 1

Netware, Linux, WIN A-Z, DOS
Delphi 2005- Delphi 2009
BeitragVerfasst: Do 20.05.10 18:04 
Hallo Leute
Ich habe schon versucht etwas zu finden aber selbst die Fragestellung ist schwierig. Deshalb schildere ich hier das Problem.

Thema:
Rangliste zweier Gruppen die sich Br und A ("Brutto" und "Netto A") nennen

Problem:
Abfrage aus einer Tabelle (Ergebnisse) und Anzeige in zwei Fenstertabellen (Tabelle BR und Tabelle A )mittels SQL. Die nachstehenden Abfragen produzieren jeweils ein Ranking der beiden Gruppen.
Die Personen sind in beiden Tabellen die selben, aber der Wert SchlSum ist anders.
Es sollen daher in der Tabelle Br nur jene Personen der Gruppe A stehen, die eine gleiche oder schlechtere Platzierung als in der Gruppe Br haben und ebenso umgekehrt.
Ich bin mir nicht sicher, ob ich das mit einem SQL Befehl lösen kann - schön und komfortabel wäre es allemal.

Abfragen:
SQL-Befehl für "Tabelle Br"
ausblenden SQL-Anweisung
1:
2:
3:
4:
select  Vorname, Gruppe, SumTur, SchlSum from Ergebnisse where 
extract (year from datum)=2010 and (Gruppe = 'Br'
Group  by Vorname, Gruppe, SumTur, SchlSum  
order by SumTur desc, SchlSum


SQL-Befehl für "Tabelle A"
ausblenden SQL-Anweisung
1:
2:
3:
4:
select  Vorname, Gruppe, SumTur, SchlSum from Ergebnisse 
where extract (year from datum)=2010 and (Gruppe = 'A'
Group  by Vorname, Gruppe, SumTur, SchlSum  
order by SumTur desc, SchlSum


Die Ergebnisse sehen dann so aus
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
Gruppe Br.................................................................Gruppe A
Rang __ Vorname __ Gruppe ___ SumTur___ SchlSum--------Vorname___ Gruppe_____ SumTur______ SchlSum
1. ___ Hans________ Br ________ 2 ________180--------Hans__________ A__________ 2 __________153
2. ___ Rupert______ Br ________ 2 ________187--------Johannes______ A__________ 2 __________166
3. ___ Johannes____ Br ________ 2 ________193--------Rupert________ A _________ 2 __________166
4. ___ Gerhard_____ Br ________ 2 ________203--------Gerhard_______ A _________ 2 __________168
5. ___ Christian___ Br ________ 1 ________93---------Hermann_______ A _________ 1 __________77
6. ___ Peter_______ Br ________ 1 ________94---------Norbert_______ A _________ 1 __________78
7. ___ Hermann_____ Br ________ 1 ________100--------Gerhard B_____ A _________ 1 __________80
8. ___ Norbert_____ Br ________ 1 ________100--------Peter_________ A _________ 1 __________80
9. ___ Gerhard_____ Br ________ 1 ________102--------Christian_____ A _________ 1 __________81
10. __ Stefan______ Br ________ 1 ________103--------Gerhard C_____ A _________ 1 __________83
11. __ Jürgen______ Br ________ 1 ________104--------Jürgen________ A _________ 1 __________83
12. __ Gerhard_____ Br ________ 1 ________107--------Stefan________ A _________ 1 __________83
13. __ Heinz_______ Br ________ 1 ________107--------Heinz_________ A _________ 1 __________91
14. __ Robert m.___ Br ________ 1 ________112--------Robert m._____ A _________ 1 __________94

Die Gruppe Br und Gruppe A sollte jedoch so aussehen und das kriege ich nicht hin
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
Gruppe Br.................................................................Gruppe A
Rang___Vorname___Gruppe__SumTur__SchlSum------Rang___Vorname_____Gruppe___SumTur__SchlSum
1.______Hans______ Br ____ 2 _____180 ------------- 1.____Johannes_____ A ______ 2 ______166
2.______Rupert____ Br ____ 2 _____187 -------------- 2.____Gerhard______ A ______ 2 ______168
3.______Christian___ Br ____ 1 _____93 -------------- 3.____Hermann______ A ______ 1 ______77
4.______Peter_____ Br ____ 1 _____94 --------------- 4.____Norbert______ A ______ 1 ______78
5.______Gerhard B_ Br ____ 1 _____102 -------------- 5.____Gerhard C ___ A ______ 1 ______83
6.______Stefan____ Br ____ 1 _____103 -------------- 6.____Jürgen_______ A ______ 1 ______83
7.______Heinz_____ Br ____ 1 _____107
8.______Robert m._ Br ____ 1 _____112


Hat dazu jemand eine Idee?

Lg Rupert

Moderiert von user profile iconNarses: Code-Tags hinzugefügt

_________________
Grüße Rupert


Zuletzt bearbeitet von Rupert am Mo 28.06.10 00:13, insgesamt 1-mal bearbeitet
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Sa 22.05.10 01:50 
Ist es zwingend, dass das Ergebnis als ein Resultset zurückkommt?

Bzw. muss es zwingend in einer Query ermittelt werden, oder dürfen es auch mehrere Queries sein, die nur am Ende ein Resultset liefern?

Welches Datenbank-System (RDBMS) nutzt Du?

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
MarkusB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 68



BeitragVerfasst: So 23.05.10 07:20 
Moin Rupert!

"Group By" ohne Aggregat-Funktion ... :gruebel:

Viele Grüße
Markus
:lupe:
Rupert Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 47
Erhaltene Danke: 1

Netware, Linux, WIN A-Z, DOS
Delphi 2005- Delphi 2009
BeitragVerfasst: Mo 24.05.10 10:48 
user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Ist es zwingend, dass das Ergebnis als ein Resultset zurückkommt?

Bzw. muss es zwingend in einer Query ermittelt werden, oder dürfen es auch mehrere Queries sein, die nur am Ende ein Resultset liefern?

Welches Datenbank-System (RDBMS) nutzt Du?


Ja, weil dieses Ergebnis als HTML gespeichert und veröffentlicht wird. Es sind aber zwei unterschiedliche Tabellen die "Brutto" und die "Netto A"

Die Datenbank ist Absolute DB

_________________
Grüße Rupert
MarkusB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 68



BeitragVerfasst: Mo 24.05.10 12:28 
Moin Rupert!

Was nun? MySQL oder Absolute DB? Der Unterschied is nämlich gewaltig! :eyes:
Was ist eine "Fenstertabelle"?
Wo hast Du die Aggregat-Funktionen verloren?

Viele Grüße
Markus
:gruebel:
Rupert Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 47
Erhaltene Danke: 1

Netware, Linux, WIN A-Z, DOS
Delphi 2005- Delphi 2009
BeitragVerfasst: Di 25.05.10 10:50 
user profile iconMarkusB hat folgendes geschrieben Zum zitierten Posting springen:
Moin Rupert!

a) Was nun? MySQL oder Absolute DB? Der Unterschied is nämlich gewaltig! :eyes:
b) Was ist eine "Fenstertabelle"?
c) Wo hast Du die Aggregat-Funktionen verloren?

Viele Grüße
Markus
:gruebel:


a) Absolute DB
b) Die in einem Fenster als Ergebnis dargestellte Tabelle
c) besser?
ausblenden SQL-Anweisung
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
SELECT Vorname,
       Gruppe,
       COUNT(*) AS AnzTurniere,
       SchlSum
 FROM Ergebnisse
        WHERE EXTRACT (year from datum) = 2010
          AND (Gruppe = 'A')
     GROUP BY Vorname,
              Gruppe,
              SchlSum
     ORDER BY AnzTurniere DESC,
              SchlSum

_________________
Grüße Rupert
Rupert Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 47
Erhaltene Danke: 1

Netware, Linux, WIN A-Z, DOS
Delphi 2005- Delphi 2009
BeitragVerfasst: Sa 26.06.10 16:14 
Ich habe dieses Problem nicht mit einer SQL-Abfrage lösen können. Die einfachste Variante war und ist es, die Ergebnisse in zwei Tabellen zu vergleichen und anschließend Platzgleiche in der Tabelle "Netto A" zu streichen. Dann die Tabelle Netto A mit "Tabelle Br" vergleichen und dort Vorkommende heraus zu löschen.

Ein Problem bleibt aber nach wie vor bestehen. Mit der Abfrage:
ausblenden SQL-Anweisung
1:
2:
3:
4:
select Name, Vorname, SchlGes, SumTur
from Ergebnisse where SumTur >= '5' 
Group by Name, Vorname, SchlGes, SumTur
order by SchlGes desc

Erhalte ich alle Ergebnisse, bei denen SumTur >=5 ist - logisch

das gleiche gilt für alle bei denen SumTur<5 ist mit:
ausblenden SQL-Anweisung
1:
2:
3:
4:
select Name, Vorname, SchlGes, SumTur
from Ergebnisse where SumTur < '5' 
Group by Name, Vorname, SchlGes, SumTur
order by SchlGes desc


Es geht bei der Abfrage darum, dass alle jene, die mehr als 5 Turniere gespielt haben, die Liste mit den wenigsten Schlägen anführen und danach alle anderen in absteigender Reihenfolge an Turnieren, ebenfalls in absteigender Schlaganzahl folgen

Frage:
Wie kann man dise beiden Ergebnisse in einer Liste ausgeben?
Union der beiden Abfragen habe ich schon probiert, funktioniert aber nicht.

Datenbank Absolute DB

_________________
Grüße Rupert