Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

SELECT mit mehreren WHERE-Klauseln

Empfohlene Antworten

Veröffentlicht

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

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]

ups...... schreibfehler. dennoch gehts nicht bzw. Problem noch offen

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

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*

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

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

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.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.