Ü5.6.2.1 MySQL, MariaDB, PostgreSQL, SQL Server, Oracle, DB2, Firebird, MS Access (ab 2016) SELECT kb.KTID, k.Gebuehr, kb.Rabatt, k.Gebuehr * (1 - kb.Rabatt/100) AS "Reduzierte Gebühr" FROM tbKursbesuche kb INNER JOIN tbKurs k ON (kb.KID = k.KID); MS Access SELECT kb.KTID, k.Gebuehr, kb.Rabatt, k.Gebuehr * (1 - kb.Rabatt/100) AS [Reduzierte Gebühr] FROM tbKursbesuche kb INNER JOIN tbKurs k ON (kb.KID = k.KID); OpenOffice.org Base SELECT kb."KTID", k."Gebuehr", kb."Rabatt", k."Gebuehr" * (1 - kb."Rabatt"/100) AS "Reduzierte Gebühr" FROM "tbKursbesuche" kb INNER JOIN "tbkurs" k ON (kb."KID" = k."KID"); Ü5.6.2.2 MySQL, MariaDB, PostgreSQL, Oracle, DB2, Firebird (ab 2.1) SELECT k.Gebuehr, d.Stundensatz * k.KursdauerStunden AS "Dozentenhonorar", d.Stundensatz * k.KursdauerStunden * 2 / k.Gebuehr AS "Mindestteilnehmer", CEIL(d.Stundensatz * k.KursdauerStunden * 2 / k.Gebuehr) AS "Mindestteilnehmer aufgerundet" FROM tbkurs k INNER JOIN tbDozent d ON (k.DID = d.DID); SQL Server SELECT k.Gebuehr, d.Stundensatz * k.KursdauerStunden AS "Dozentenhonorar", d.Stundensatz * k.KursdauerStunden * 2 / k.Gebuehr AS "Mindestteilnehmer", CEILING(d.Stundensatz * k.KursdauerStunden * 2 / k.Gebuehr) AS "Mindestteilnehmer aufgerundet" FROM tbkurs k INNER JOIN tbDozent d ON (k.DID = d.DID); Firebird (ältere Versionen) SELECT k.Gebuehr, d.Stundensatz * k.KursdauerStunden AS "Dozentenhonorar", d.Stundensatz * k.KursdauerStunden * 2 / k.Gebuehr AS "Mindestteilnehmer" FROM tbkurs k INNER JOIN tbDozent d ON (k.DID = d.DID); Die Funktion CEIL existiert nicht. MS Access SELECT k.Gebuehr, d.Stundensatz * k.KursdauerStunden AS [Dozentenhonorar], d.Stundensatz * k.KursdauerStunden * 2 / k.Gebuehr AS [Mindestteilnehmer], INT((d.Stundensatz * k.KursdauerStunden * 2 / k.Gebuehr) + 1) AS [Mindestteilnehmer aufgerundet] FROM tbkurs k INNER JOIN tbDozent d ON (k.DID = d.DID); OpenOffice.org Base SELECT "tbkurs"."Gebuehr", "tbDozent"."Stundensatz" * "tbkurs"."KursdauerStunden" AS "Dozentenhonorar", "tbDozent"."Stundensatz" * "tbkurs"."KursdauerStunden" * 2 / "tbkurs"."Gebuehr" AS "Mindestteilnehmer", CEILING("tbDozent"."Stundensatz" * "tbkurs"."KursdauerStunden" * 2 / "tbkurs"."Gebuehr") AS "Mindestteilnehmer aufgerundet" FROM "tbkurs", "tbDozent" WHERE ( "tbkurs"."DID" = "tbDozent"."DID" ); Denken Sie an die angesprochenen Probleme mit dem INNER JOIN bei openBase. Daher hier die klassische Lösung. Ü5.6.2.3 MySQL, MariaDB, PostgreSQL, SQL Server, Oracle, DB2, Firebird (ab 2.1) SELECT KTHID, EXP(KTHID), SQRT(KTHID) FROM tbkursthema WHERE KTHID <= 10; Firebird (ältere Versionen) Die Funktionen sind nicht verfügbar. MS Access SELECT KTHID, EXP(KTHID), SQR(KTHID) FROM tbkursthema WHERE KTHID <= 10; OpenOffice.org Base SELECT KTHID, EXP(KTHID), SQRT(KTHID) FROM "tbKursthema" WHERE KTHID <= 10; Ü5.6.2.4 MySQL, MariaDB, DB2, SQL Server, Firebird (ab 2.1) SELECT FLOOR(RAND()*6) +1 FROM tbKursbesuche; PostgreSQL SELECT FLOOR(RANDOM()*6) +1 FROM tbKursbesuche; Oracle SELECT FLOOR(dbms_random.value()*6) +1 FROM tbKursbesuche; Firebird (ältere Versionen) Funktion nicht verfügbar MS Access SELECT Int(Rnd()*6)+1 AS Ausdr1 FROM tbKursbesuche; OpenOffice.org Base SELECT FLOOR(RAND()*6) +1 FROM "tbKursbesuche"; Ü5.6.3.1 MySQL, MariaDB, DB2, SQL Server SELECT ROUND(ASCII(SUBSTRING(KID,1,1)) * RAND(),0) FROM tbkurs; PostgreSQL SELECT ROUND(ASCII(SUBSTRING(KID,1,1)) * RANDOM()) FROM tbkurs; Oracle SELECT ROUND(ASCII(SUBSTR(KID,1,1)) * dbms_random.value(),0) FROM tbkurs; Firebird (ab 2.1) SELECT ROUND(ASCII_VAL(SUBSTRING(KID from 1 for 1)) * RAND(),0) FROM tbkurs; In älteren Versionen existieren die weiteren Funktionen nicht. SELECT SUBSTRING(KID FROM 1 FOR 1) FROM tbkurs; MS Access SELECT ROUND(ASC(MID(KID,1,1)) * RND(),0) FROM tbkurs; OpenOffice.org Base SELECT ROUND(ASCII(SUBSTRING("KID",1,1)) * RAND(),0) FROM "tbkurs"; Ü5.6.3.2 MySQL, MariaDB, PostgreSQL, DB2, Oracle SELECT REPLACE(k.kurskennung, 'Access', 'MySQL') AS "Kurskennung", REPLACE(kt.Kursthema, 'Access', 'MySQL') AS "Kursthema", CONCAT(kt.DauerPlan, ' Stunden') AS "Dauer", k.Kursbeginn, k.Kursende FROM tbkurs k INNER JOIN tbkursthema kt ON (k.KTHID = kt.KTHID); SQL Server SELECT REPLACE(k.kurskennung, 'Access', 'MySQL') AS "Kurskennung", REPLACE(kt.Kursthema, 'Access', 'MySQL') AS "Kursthema", CAST(kt.DauerPlan AS varchar(4)) + ' Stunden' AS "Dauer", k.Kursbeginn, k.Kursende FROM tbkurs k INNER JOIN tbkursthema kt ON (k.KTHID = kt.KTHID); Firebird (ab 2.1) SELECT REPLACE(k.kurskennung, 'Access', 'MySQL') AS "Kurskennung", REPLACE(kt.Kursthema, 'Access', 'MySQL') AS "Kursthema", kt.DauerPlan || ' Stunden' AS "Dauer", k.Kursbeginn, k.Kursende FROM tbkurs k INNER JOIN tbkursthema kt ON (k.KTHID = kt.KTHID); Firebird (ältere Versionen) SELECT kt.DauerPlan || ' Stunden' AS "Dauer", k.Kursbeginn, k.Kursende FROM tbkurs k INNER JOIN tbkursthema kt ON (k.KTHID = kt.KTHID); Kein REPLACE in dieser Form MS Access SELECT REPLACE(k.kurskennung, 'Access', 'MySQL') AS "Kurskennung", REPLACE(kt.Kursthema, 'Access', 'MySQL') AS "Kursthema", kt.DauerPlan & ' Stunden' AS "Dauer", k.Kursbeginn, k.Kursende FROM tbkurs k INNER JOIN tbkursthema kt ON (k.KTHID = kt.KTHID); OpenOffice.org Base SELECT REPLACE(k."Kurskennung", 'Access', 'MySQL') AS "Kurskennung", REPLACE(kt."Kursthema", 'Access', 'MySQL') AS "Kursthema", CONCAT(kt."DauerPlan", ' Stunden') AS "Dauer", k."Kursbeginn", k."Kursende" FROM "tbkurs" k, "tbKursthema" kt WHERE (k."KTHID" = kt."KTHID"); Ü5.6.3.3 MySQL, MariaDB, PostgreSQL SELECT CONCAT(Familienname, ', ', Vorname) AS "Name", CONCAT(SUBSTRING(PLZ,1,2), 'xxx') AS "PLZ", UPPER(ort) AS Ort, Strasse FROM tbperson ORDER BY 1; SQL Server SELECT Familienname + ', ' + Vorname AS "Name", SUBSTRING(PLZ,1,2)+ 'xxx' AS "PLZ", UPPER(ort) AS Ort, Strasse FROM tbperson ORDER BY 1; Oracle, DB2 SELECT CONCAT(Familienname, CONCAT(', ', Vorname)) AS "Name", CONCAT(SUBSTR(PLZ,1,2), 'xxx') AS "PLZ", UPPER(ort) AS Ort, Strasse FROM tbperson ORDER BY 1; Firebird SELECT Familienname || ', ' || Vorname AS "Name", SUBSTRING(PLZ FROM 1 FOR 2) || 'xxx' AS "PLZ", UPPER(ort) AS Ort, Strasse FROM tbperson ORDER BY 1; MS Access SELECT Familienname & ', ' & Vorname AS [Name], MID(PLZ,1,2) & 'xxx' AS [Postleitzahl], UCase(ort) AS [Ortsname], Strasse FROM tbperson ORDER BY 1; Anmerkung: In Access 2003 aufwärts besser mit " für die Alias. OpenOffice.org Base SELECT CONCAT("Familienname",CONCAT( ', ', "Vorname")) AS "Name", CONCAT(SUBSTRING("PLZ",1,2), 'xxx') AS "PLZ", UPPER("Ort") AS "Ort", "Strasse" FROM "tbPerson" ORDER BY 1; Ü5.6.3.4 MySQL, MariaDB, PostgreSQL SELECT CONCAT(SUBSTRING(KID,1,LENGTH(KID)-2), '-', Kursbeginn) AS "KID", Kurskennung FROM tbkurs; SQL Server SELECT SUBSTRING(KID,1,LEN(KID)-2) + '-' + CAST(Kursbeginn AS VARCHAR(10)) AS "KID", Kurskennung FROM tbkurs; Oracle, DB2 SELECT CONCAT(SUBSTR(KID,1,LENGTH(KID)-2), CONCAT('-', Kursbeginn)) AS "KID", Kurskennung FROM tbkurs; Firebird SELECT SUBSTRING(KID FROM 1 FOR 1) || '-' || Kursbeginn AS "KID", Kurskennung FROM tbkurs; strlen nicht im Standard. MS Access SELECT MID(KID,1,LEN(KID)-2) & '-' & Kursbeginn AS "KID", Kurskennung FROM tbkurs; Hier mit Alias für Access 2007 OpenOffice.org Base SELECT CONCAT(SUBSTRING ("KID" FROM 1 FOR (LENGTH("KID") - 2)), CONCAT('-', "Kursbeginn")) AS "KID", "Kurskennung" FROM "tbkurs"; Ü5.6.4.1 MySQL, MariaDB, PostgreSQL, Oracle, DB2, Firebird SELECT Familienname, Vorname, CURRENT_DATE, EXTRACT(MONTH FROM CURRENT_DATE), EXTRACT(DAY FROM CURRENT_DATE), EXTRACT(MONTH FROM Geburtsdatum), EXTRACT(DAY FROM Geburtsdatum) FROM tbPerson WHERE Geburtsdatum IS NOT NULL; SQL Server SELECT "Familienname", "Vorname", GETDATE(), MONTH(GETDATE()), DAY(GETDATE()), MONTH("Geburtsdatum"), DAY("Geburtsdatum") FROM "tbPerson" WHERE "Geburtsdatum" IS NOT NULL; MS Access SELECT tbPerson.Familienname, tbPerson.Vorname, Date(), DatePart('m',Date()), DatePart('d',Date()), DatePart('m',Geburtsdatum), DatePart('d',Geburtsdatum) FROM tbPerson WHERE Geburtsdatum Is Not Null; OpenOffice.org Base SELECT "Familienname", "Vorname", CURRENT_DATE, MONTH(CURRENT_DATE), DAY(CURRENT_DATE), MONTH("Geburtsdatum"), DAY("Geburtsdatum") FROM "tbPerson" WHERE "Geburtsdatum" IS NOT NULL; Ü5.6.4.2 MySQL, MariaDB, PostgreSQL, Oracle, DB2, Firebird SELECT Familienname, Vorname, CURRENT_DATE, Geburtsdatum, EXTRACT(DAY FROM Geburtsdatum) - EXTRACT(DAY FROM CURRENT_DATE) AS "Tage bis zum Geburtstag" FROM tbPerson WHERE (Geburtsdatum IS NOT NULL) AND (EXTRACT(MONTH FROM CURRENT_DATE)=EXTRACT(MONTH FROM Geburtsdatum)) AND (EXTRACT(DAY FROM Geburtsdatum) - EXTRACT(DAY FROM CURRENT_DATE) >= 0); Hinweis: Beispiel wie beschrieben mit addierter Zahl für Ergebnisse in zwei Monaten. Ändern Sie +2 testweise. Bei den anderen Datenbanken können Sie entsprechend vorgehen. SQL Server SELECT Familienname, Vorname, GETDATE(), Geburtsdatum, DAY(Geburtsdatum) - DAY(GETDATE()) AS "Tage bis zum Geburtstag" FROM tbPerson WHERE (Geburtsdatum IS NOT NULL) AND (MONTH(GETDATE())=MONTH(Geburtsdatum)) AND (DAY(Geburtsdatum) - DAY(GETDATE()) >= 0); MS Access SELECT Familienname, Vorname, Date(), Geburtsdatum, DatePart('d',Geburtsdatum)-DatePart('d',Date()) AS [Tage bis zum Geburtstag] FROM tbPerson WHERE (Geburtsdatum Is Not Null) AND (DatePart('m',Date())=DatePart('m',[Geburtsdatum])) AND (DatePart('d',[Geburtsdatum])-DatePart('d',Date())>=0); OpenOffice.org Base SELECT "Familienname", "Vorname", CURRENT_DATE, "Geburtsdatum", DAY("Geburtsdatum")-DAY(CURRENT_DATE) AS "Tage bis zum Geburtstag" FROM "tbPerson" WHERE ("Geburtsdatum" IS NOT NULL) AND (MONTH(CURRENT_DATE)=MONTH("Geburtsdatum")) AND (DAY("Geburtsdatum")-DAY(CURRENT_DATE)>=0); Ü5.6.4.3 MySQL, MariaDB SELECT KID, Kurskennung, Kursbeginn, Kursende, DATEDIFF(Kursende, Kursbeginn)+1 FROM tbkurs; PostgreSQL, Oracle, DB2, Firebird SELECT KID, Kurskennung, Kursbeginn, Kursende, EXTRACT(DAY FROM Kursende) - EXTRACT(DAY FROM Kursbeginn) + 1 FROM tbkurs; Bei Monatswechsel müsste das noch verfeinert werden, dafür werden aber weitere Funktionen benötigt. SQL Server SELECT KID, Kurskennung, Kursbeginn, Kursende, DATEDIFF(day, Kursende, Kursbeginn)+1 FROM tbkurs; MS Access SELECT KID, Kurskennung, Kursbeginn, Kursende, DateDiff('d',Kursbeginn,Kursende)+1 FROM tbkurs; OpenOffice.org Base SELECT "KID", "Kurskennung", "Kursbeginn", "Kursende", DateDiff('dd',"Kursbeginn","Kursende")+1 FROM "tbKurs"; Ü5.6.4.4 MySQL, MariaDB SELECT CONCAT(KID, '-Neuer Kurs'), Kurskennung, DAYNAME(Kursbeginn), ADDDATE(Kursbeginn,7), Kursbeginn FROM tbkurs; PostgreSQL SELECT CONCAT(KID, '-Neuer Kurs'), Kurskennung, Kursbeginn + interval '7 days', Kursbeginn FROM tbkurs; SQL Server SELECT KID + '-Neuer Kurs', Kurskennung, DATENAME(weekday, Kursbeginn), DATEADD(day, 7, Kursbeginn), Kursbeginn FROM tbkurs; Oracle SELECT CONCAT(KID, '-Neuer Kurs'), Kurskennung, Kursbeginn + TO_DSINTERVAL('7 00:00:00'), Kursbeginn FROM tbkurs; DB2 SELECT CONCAT(KID, '-Neuer Kurs'), Kurskennung, Kursbeginn + 7 DAYS, Kursbeginn FROM tbkurs; Firebird (ab 2.1) SELECT KID || '-Neuer Kurs', Kurskennung, EXTRACT(WEEKDAY FROM Kursbeginn), DATEADD(7 DAY TO Kursbeginn), Kursbeginn FROM tbkurs; Firebird (ältere Versionen) nicht verfügbar MS Access SELECT KID & '-Neuer Kurs', Kurskennung, DateAdd('d',Kursbeginn,7), Kursbeginn FROM tbkurs; OpenOffice.org Base nicht verfügbar Ü5.6.6.1 MySQL, MariaDB, PostgreSQL SELECT CONCAT(Familienname, CASE WHEN Vorname IS NOT NULL THEN CONCAT(', ', Vorname) ELSE '' END), CONCAT(SUBSTRING(PLZ,1,2), 'xxx'), UPPER(ort), Strasse FROM tbperson ORDER BY 1; SQL Server SELECT Familienname + CASE WHEN Vorname IS NOT NULL THEN ', ' + Vorname ELSE '' END, SUBSTRING(PLZ,1,2) + 'xxx', UPPER(ort), Strasse FROM tbperson ORDER BY 1; Oracle, DB2 SELECT CONCAT(Familienname, CASE WHEN Vorname IS NOT NULL THEN CONCAT(', ', Vorname) ELSE '' END), CONCAT(SUBSTR(PLZ,1,2), 'xxx'), UPPER(ort), Strasse FROM tbperson ORDER BY 1; Firebird (ab 2.1) SELECT Familienname || CASE WHEN Vorname IS NOT NULL THEN ', ' || Vorname ELSE '' END, SUBSTRING(PLZ FROM 1 FOR 2) || 'xxx', UPPER(ort), Strasse FROM tbperson ORDER BY 1; Firebird (ältere Versionen) nicht verfügbar MS Access SELECT Familienname & (switch(Vorname IS NOT NULL, ', ' & Vorname, Vorname IS NULL, '')), MID(PLZ,1,2) & 'xxx', UCase(ort), Strasse FROM tbperson ORDER BY 1; OpenOffice.org Base ACHTUNG: In openBase muss vor der Ausführung unter Bearbeiten die Option "SQL-KOmmando direkt ausführen" ausgewählt werden. SELECT CONCAT("Familienname", CASE WHEN "Vorname" IS NOT NULL THEN CONCAT(', ', "Vorname") ELSE '' END), CONCAT(SUBSTRING("PLZ",1,2), 'xxx'), UPPER("Ort"), "Strasse" FROM "tbPerson" ORDER BY 1; Ü5.6.6.2 MySQL, MariaDB SELECT Geburtsdatum, CURRENT_DATE, CASE WHEN (MONTH(Geburtsdatum) < MONTH(CURRENT_DATE)) OR (MONTH(Geburtsdatum) = MONTH(CURRENT_DATE) AND DAY(Geburtsdatum) <= DAY(CURRENT_DATE)) THEN 'Ja' ELSE 'Nein' END AS"schon Geburtstag gehabt" FROM tbPerson; Auch mit EXTRACT möglich PostgreSQL, Oracle, DB2, Firebird SELECT Geburtsdatum, CURRENT_DATE, CASE WHEN (EXTRACT(MONTH FROM Geburtsdatum) < EXTRACT(MONTH FROM CURRENT_DATE)) OR (EXTRACT(MONTH FROM Geburtsdatum) = EXTRACT(MONTH FROM CURRENT_DATE) AND EXTRACT(DAY FROM Geburtsdatum) <= EXTRACT(DAY FROM CURRENT_DATE)) THEN 'Ja' ELSE 'Nein' END AS "schon Geburtstag gehabt" FROM tbPerson; SQL Server SELECT Geburtsdatum, GETDATE(), CASE WHEN (MONTH(Geburtsdatum) < MONTH(GETDATE())) OR (MONTH(Geburtsdatum) = MONTH(GETDATE()) AND DAY(Geburtsdatum) <= DAY(GETDATE())) THEN 'Ja' ELSE 'Nein' END AS "schon Geburtstag gehabt" FROM tbPerson; MS Access SELECT Geburtsdatum, Date(), IIF((DatePart('m',Geburtsdatum) < DatePart('m',Date())) OR ((DatePart('m',Geburtsdatum)=DatePart('m',Date())) AND (DatePart('d',Geburtsdatum)<=DatePart('d',Date()))),'Ja','Nein') AS [schon Geburtstag gehabt] FROM tbPerson; OpenOffice.org Base ACHTUNG: In openBase muss vor der Ausführung unter Bearbeiten die Option "SQL-KOmmando direkt ausführen" ausgewählt werden. SELECT "Geburtsdatum", CURRENT_DATE, CASE WHEN (MONTH("Geburtsdatum") < MONTH(CURRENT_DATE)) OR ((MONTH("Geburtsdatum") = MONTH(CURRENT_DATE)) AND (DAY("Geburtsdatum")<= DAY(CURRENT_DATE))) THEN 'Ja' ELSE 'Nein' END FROM "tbPerson"; Ü5.7.1 MySQL, MariaDB, PostgreSQL, SQL Server, Oracle, DB2, Firebird, MS Access, OpenOffice.org Base SELECT Zahlweise, COUNT(Zahlweise) AS "Anzahl" FROM tbKursbesuche GROUP BY Zahlweise ORDER BY 2 DESC; Ü5.7.2 MySQL, MariaDB, PostgreSQL, SQL Server, Oracle, DB2, Firebird, MS Access, OpenOffice.org Base SELECT COUNT(KursdauerStunden) AS "Anzahl", SUM(KursdauerStunden) AS "Summe der Stunden", MIN(KursdauerStunden) AS "Kleinste Stundenzahl", MAX(KursdauerStunden) AS "Größte Stundenzahl", AVG(KursdauerStunden) AS "Mittlere Stundenzahl" FROM tbkurs; Achten Sie gegebenenfalls auf die Besonderheiten der Alias-Markierung. Ü5.7.3 MySQL, MariaDB, PostgreSQL, Oracle, DB2, MS Access, OpenOffice.org Base SELECT MAX(k.Kurskennung), kb.KID, SUM(GezahlterBetrag) AS "Summe der Zahlungen", AVG(GezahlterBetrag) AS "Durchschnittliche Zahlungshöhe", STDDEV_POP(GezahlterBetrag) AS "Standardabweichung" FROM tbKursbesuche kb INNER JOIN tbkurs k ON (kb.KID = k.KID) GROUP BY kb.KID ORDER BY 4 DESC; Achten Sie gegebenenfalls auf die Besonderheiten der Alias-Markierung. SQL Server SELECT MAX(k.Kurskennung), kb.KID, SUM(GezahlterBetrag) AS "Summe der Zahlungen", AVG(GezahlterBetrag) AS "Durchschnittliche Zahlungshöhe", STDEVP(GezahlterBetrag) AS "Standardabweichung" FROM tbKursbesuche kb INNER JOIN tbkurs k ON (kb.KID = k.KID) GROUP BY kb.KID ORDER BY 4 DESC; Firebird SELECT MAX(k.Kurskennung), kb.KID, SUM(GezahlterBetrag) AS "Summe der Zahlungen", AVG(GezahlterBetrag) AS "Durchschnittliche Zahlungshöhe" FROM tbKursbesuche kb INNER JOIN tbkurs k ON (kb.KID = k.KID) GROUP BY kb.KID ORDER BY 4 DESC; (ohne Standardabweichung) Ü5.7.4 PostgreSQL, Oracle, DB2, Firebird (ab 2.1) SELECT kb.KID, CORR(GezahlterBetrag,Rabatt) AS "Standardabweichung" FROM tbKursbesuche kb GROUP BY kb.KID ORDER BY 2 DESC; In den anderen Systemen nicht verfügbar.