Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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);

Geschrieben

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]

Geschrieben

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

Geschrieben

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*

Geschrieben

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 :-)

Geschrieben

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

Geschrieben
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

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...