SQLFan_2020
Neuer Benutzer
- Beiträge
- 2
Hallo SQL-Freunde,
könnt ihr mir bitte helfen, folgendes zu verstehen:
Es geht um diese Tabelle:
CREATE TABLE IF NOT EXISTS "tblKursbelegung" (
"KursNr" TEXT,
"StudentNr" TEXT,
"Punkte" REAL,
PRIMARY KEY("KursNr","StudentNr")
);
Dabei ist es wichtig, dass Punkte gleich NULL ist, solange ein Student noch nicht bewertet wurde.
INSERT INTO "tblKursbelegung" VALUES ('A1','3',1.0);
INSERT INTO "tblKursbelegung" VALUES ('A1','4',NULL);
INSERT INTO "tblKursbelegung" VALUES ('A1','5',4.0);
INSERT INTO "tblKursbelegung" VALUES ('A1','8',NULL);
INSERT INTO "tblKursbelegung" VALUES ('A2','1',6.0);
INSERT INTO "tblKursbelegung" VALUES ('A2','3',NULL);
INSERT INTO "tblKursbelegung" VALUES ('A2','7',NULL);
INSERT INTO "tblKursbelegung" VALUES ('B1','2',5.0);
INSERT INTO "tblKursbelegung" VALUES ('B1','3',NULL);
INSERT INTO "tblKursbelegung" VALUES ('B1','6',NULL);
INSERT INTO "tblKursbelegung" VALUES ('C1','4',6.0);
INSERT INTO "tblKursbelegung" VALUES ('C1','5',NULL);
INSERT INTO "tblKursbelegung" VALUES ('C2','1',NULL);
INSERT INTO "tblKursbelegung" VALUES ('C2','2',3.0);
INSERT INTO "tblKursbelegung" VALUES ('C2','3',NULL);
INSERT INTO "tblKursbelegung" VALUES ('C2','4',NULL);
INSERT INTO "tblKursbelegung" VALUES ('C2','5',5.0);
INSERT INTO "tblKursbelegung" VALUES ('D1','7',NULL);
INSERT INTO "tblKursbelegung" VALUES ('D1','8',1.0);
Zu beachten ist, dass Student 6 in nur einem Kurs eingetragen ist und in diesem noch nicht bewertet wurde.
Die folgende Abfrage soll eine Übersicht (ähnlich einer Kreuztabellenabfrage in ACCESS) erzeugen.
Dabei sollen NULL-Werte als der Text "-" dargestellt werden.
CREATE VIEW "qryÜbersicht" AS SELECT StudentNr,
min(CASE WHEN KursNr = "A1" THEN Punkte ELSE "-" END) AS "Kurs A1",
min(CASE WHEN KursNr = "A2" THEN Punkte ELSE "-" END) AS "Kurs A2",
min(CASE WHEN KursNr = "B1" THEN Punkte ELSE "-" END) AS "Kurs B1",
min(CASE WHEN KursNr = "C1" THEN Punkte ELSE "-" END) AS "Kurs C1",
min(CASE WHEN KursNr = "C2" THEN Punkte ELSE "-" END) AS "Kurs C2",
min(CASE WHEN KursNr = "D1" THEN Punkte ELSE "-" END) AS "Kurs D1",
CASE WHEN sum(Punkte)>0 THEN sum(Punkte) ELSE "-" END AS Gesamt
FROM tblKursbelegung
GROUP BY StudentNr;
Klappt auch. Fast immer. Nur bei Student 6 im Kurs B1 wird NULL und nicht "-" angezeigt.
Meine Vermutung ist, dass wenn ein Student genau einen Kurs belegt hat und in diesem Kurs noch nicht bewertet wurde, statt "-" doch wieder NULL angezeigt wird.
Wieso ist das der Fall? Und wie lautet ein Lösung, um das zu verhindern?
Das beschrieben Verhalten habe ich mit DB Browser for SQLite beobachtet
könnt ihr mir bitte helfen, folgendes zu verstehen:
Es geht um diese Tabelle:
CREATE TABLE IF NOT EXISTS "tblKursbelegung" (
"KursNr" TEXT,
"StudentNr" TEXT,
"Punkte" REAL,
PRIMARY KEY("KursNr","StudentNr")
);
Dabei ist es wichtig, dass Punkte gleich NULL ist, solange ein Student noch nicht bewertet wurde.
INSERT INTO "tblKursbelegung" VALUES ('A1','3',1.0);
INSERT INTO "tblKursbelegung" VALUES ('A1','4',NULL);
INSERT INTO "tblKursbelegung" VALUES ('A1','5',4.0);
INSERT INTO "tblKursbelegung" VALUES ('A1','8',NULL);
INSERT INTO "tblKursbelegung" VALUES ('A2','1',6.0);
INSERT INTO "tblKursbelegung" VALUES ('A2','3',NULL);
INSERT INTO "tblKursbelegung" VALUES ('A2','7',NULL);
INSERT INTO "tblKursbelegung" VALUES ('B1','2',5.0);
INSERT INTO "tblKursbelegung" VALUES ('B1','3',NULL);
INSERT INTO "tblKursbelegung" VALUES ('B1','6',NULL);
INSERT INTO "tblKursbelegung" VALUES ('C1','4',6.0);
INSERT INTO "tblKursbelegung" VALUES ('C1','5',NULL);
INSERT INTO "tblKursbelegung" VALUES ('C2','1',NULL);
INSERT INTO "tblKursbelegung" VALUES ('C2','2',3.0);
INSERT INTO "tblKursbelegung" VALUES ('C2','3',NULL);
INSERT INTO "tblKursbelegung" VALUES ('C2','4',NULL);
INSERT INTO "tblKursbelegung" VALUES ('C2','5',5.0);
INSERT INTO "tblKursbelegung" VALUES ('D1','7',NULL);
INSERT INTO "tblKursbelegung" VALUES ('D1','8',1.0);
Zu beachten ist, dass Student 6 in nur einem Kurs eingetragen ist und in diesem noch nicht bewertet wurde.
Die folgende Abfrage soll eine Übersicht (ähnlich einer Kreuztabellenabfrage in ACCESS) erzeugen.
Dabei sollen NULL-Werte als der Text "-" dargestellt werden.
CREATE VIEW "qryÜbersicht" AS SELECT StudentNr,
min(CASE WHEN KursNr = "A1" THEN Punkte ELSE "-" END) AS "Kurs A1",
min(CASE WHEN KursNr = "A2" THEN Punkte ELSE "-" END) AS "Kurs A2",
min(CASE WHEN KursNr = "B1" THEN Punkte ELSE "-" END) AS "Kurs B1",
min(CASE WHEN KursNr = "C1" THEN Punkte ELSE "-" END) AS "Kurs C1",
min(CASE WHEN KursNr = "C2" THEN Punkte ELSE "-" END) AS "Kurs C2",
min(CASE WHEN KursNr = "D1" THEN Punkte ELSE "-" END) AS "Kurs D1",
CASE WHEN sum(Punkte)>0 THEN sum(Punkte) ELSE "-" END AS Gesamt
FROM tblKursbelegung
GROUP BY StudentNr;
Klappt auch. Fast immer. Nur bei Student 6 im Kurs B1 wird NULL und nicht "-" angezeigt.
Meine Vermutung ist, dass wenn ein Student genau einen Kurs belegt hat und in diesem Kurs noch nicht bewertet wurde, statt "-" doch wieder NULL angezeigt wird.
Wieso ist das der Fall? Und wie lautet ein Lösung, um das zu verhindern?
Das beschrieben Verhalten habe ich mit DB Browser for SQLite beobachtet