Veröffentlicht 13. April 201015 j Folgende 2 Tabellen: tblSchueler id#Vorname#Name#Klasse#Disziplin#Ergebnis 1 Reiner Zufall 9 1 500m 2 Reiner Zufall 9 2 400m 3 Reiner Zufall 9 3 15min 4 Roland Zufall 9 2 700m 5 Roland Zufall 9 1 300m 6 Roland Zufall 9 3 30min 7 Richard Zufall 8 3 10min 8 Richard Zufall 8 1 200m tblDisziplin id#art 1 Spucken 2 Steinewerfen 3 Faulenzen Nun möchte ich alle als SELECT Befehl in eine Tabelle haben. die 9. Klasse hat nur die Disziplinen 2,3 die 8. Klasse hat nur die Disziplinen 1,3 So sollte es aussehen: Name Vorname Klasse Weitendisziplin Zeitdisziplin Reiner Zufall 9 900m 15min Roland Zufall 9 1000m 30min Richard Zufall 8 200m 10min Mein Ansatz, was aber nur leider für die erste Spalte (Weitendisziplin) zu gehen scheint, da ich nicht weiß, wie ich spaltenmäßig extra eine WHERE Klausel einbauen soll. SELECT tblSchueler.Name, tblSchueler.Vorname, tblSchueler.Klasse, extraspalte as 'Weitendisziplin', extraspalte as 'Zeitdisziplin' FROM tblSchueler,tblDisziplin INNER JOIN tblDisziplin ON tblDisziplin.id = tblSchueler.id WHERE tblSchueler.Disziplin_id IN ((CASE WHEN tblSchueler.Klasee <= 8 THEN '1' ELSE '2' END),3);
13. April 201015 j SELECT tblSchueler.Name, tblSchueler.Vorname, tblSchueler.Klasse, extraspalte as 'Weitendisziplin', extraspalte as 'Zeitdisziplin' FROM tblSchueler,tblDisziplin INNER JOIN tblDisziplin ON tblDisziplin.id = tblSchueler.id WHERE tblSchueler.Disziplin_id IN ((CASE WHEN tblSchueler.Klasee <= 8 THEN '1' ELSE '2' END),3); Laut deiner Darstellung oben ist der Join falsch. Du verknüpfst die beiden Primary keys... die haben aber nix miteiander zu tun. Müsste wohl eher so lauten: FROM tblSchueler,tblDisziplin INNER JOIN tblDisziplin ON [COLOR="Red"]tblDisziplin.id = tblSchueler.disziplin[/COLOR]
13. April 201015 j Punkt 1: Dein Tabbellendesign ist suboptimal ... allein schon weil du Ergebnis mitsamt Einheit in einer Spalte notierst Punkt 2: Du hast dein DBMS noch nicht genannt Goos
13. April 201015 j MS SQL 2005 das design geht leider nicht anders, da die einheit hier nur erdacht wurde, um den hintergrund besser zu verstehen zu können *duck*
13. April 201015 j Na ein 2005er SQL Server ist doch schon ok, der kennt ne PIVOT Funktion. Die Einheit brauchst aber für deine Aufgabe. Sie stellt ein Gruppierungskriterium dar. Du willst ja schliesslich alle Weiten addieren. Sogesehen würde ich dir raten, im Ergebnis nur die Zahlenwerte zu halten und dafür in der Tabelle tblDisziplin eine Spalte Einheit einzufügen. Du kannst dann ein Statement mit PIVOT Funktion darauf loslassen. Das würde wohl in etwa so ausschaun: SELECT Name, Vorname, Klasse, [m] AS 'Weite', [MIN] as 'Zeit' FROM (SELECT a.Name, a.Vorname, a.Klasse, Ergebnis , b.Einheit FROM tblSchueler a INNER JOIN tblDisziplin b ON b.id = a.Disziplin ) p PIVOT (SUM(Ergebnis) FOR Einheit IN ( [m], [min]) ) AS pvt Goos PS: du solltest aber kein a und b Alias verwenden, so wie ich das hier getan hab ... is ein ganz schlechter Stil, erhöht aber meiner Meinung nach bei einen so kurzen Statement die Übersicht :-)
16. April 201015 j Ich glaube ich habe falsch gefragt (Gedankenfehler)^^ Und wenn ich die einzelnen Disziplinen ausgeben will? Name##Vorname##Klasse##Spucken##Faulenzen##Steinewerfen Reiner Zufall 9 [leer] 400m 15min Roland Zufall 9 [leer] 700m 30min Richard Zufall 8 200m [leer] 10min die 9. Klasse hat nur die Disziplinen 2,3 die 8. Klasse hat nur die Disziplinen 1,3 1 Spucken 2 Steinewerfen 3 Faulenzen
16. April 201015 j Ich glaube ich habe falsch gefragt (Gedankenfehler)^^ Und wenn ich die einzelnen Disziplinen ausgeben will? Dann geht das mit einem gleichgearteten Statement. ^^ Du musst nur die Einheiten rausnehmen und durch die Disziplinen ersetzen. Goos
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.