Odaiko Geschrieben 13. April 2010 Teilen Geschrieben 13. April 2010 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); Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
LadyPreis Geschrieben 13. April 2010 Teilen Geschrieben 13. April 2010 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] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Odaiko Geschrieben 13. April 2010 Autor Teilen Geschrieben 13. April 2010 ups...... schreibfehler. dennoch gehts nicht bzw. Problem noch offen Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Goos Geschrieben 13. April 2010 Teilen Geschrieben 13. April 2010 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Odaiko Geschrieben 13. April 2010 Autor Teilen Geschrieben 13. April 2010 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* Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Goos Geschrieben 13. April 2010 Teilen Geschrieben 13. April 2010 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 :-) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Odaiko Geschrieben 16. April 2010 Autor Teilen Geschrieben 16. April 2010 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Goos Geschrieben 16. April 2010 Teilen Geschrieben 16. April 2010 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.