| Autor |
Beitrag |
Rupert
      
Beiträge: 47
Erhaltene Danke: 1
Netware, Linux, WIN A-Z, DOS
Delphi 2005- Delphi 2009
|
Verfasst: 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"
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"
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
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
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 Narses: Code-Tags hinzugefügt
_________________ Grüße Rupert
Zuletzt bearbeitet von Rupert am Mo 28.06.10 00:13, insgesamt 1-mal bearbeitet
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: 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
      
Beiträge: 68
|
Verfasst: So 23.05.10 07:20
Moin Rupert!
"Group By" ohne Aggregat-Funktion ...
Viele Grüße
Markus

|
|
Rupert 
      
Beiträge: 47
Erhaltene Danke: 1
Netware, Linux, WIN A-Z, DOS
Delphi 2005- Delphi 2009
|
Verfasst: Mo 24.05.10 10:48
BenBE hat folgendes geschrieben : | 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
      
Beiträge: 68
|
Verfasst: Mo 24.05.10 12:28
Moin Rupert!
Was nun? MySQL oder Absolute DB? Der Unterschied is nämlich gewaltig!
Was ist eine "Fenstertabelle"?
Wo hast Du die Aggregat-Funktionen verloren?
Viele Grüße
Markus

|
|
Rupert 
      
Beiträge: 47
Erhaltene Danke: 1
Netware, Linux, WIN A-Z, DOS
Delphi 2005- Delphi 2009
|
Verfasst: Di 25.05.10 10:50
_________________ Grüße Rupert
|
|
Rupert 
      
Beiträge: 47
Erhaltene Danke: 1
Netware, Linux, WIN A-Z, DOS
Delphi 2005- Delphi 2009
|
Verfasst: 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:
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:
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
|
|
|