Ü5.6.2.1 MySQL, PostgreSQL, SQL Server, Oracle, Firebird 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, PostgreSQL, Oracle 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 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], CEIL(d.Stundensatz * k.KursdauerStunden * 2 / k.Gebuehr) 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 Probeleme mit dem INNER JOIN bei openBase. Daher hier die klassische Lösung. Ü5.6.2.3 MySQL, PostgreSQL, SQL Server, Oracle SELECT KTHID, EXP(KTHID), SQRT(KTHID) FROM tbkursthema WHERE KTHID <= 10; Firebird 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, SQL Server 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 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, 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 SELECT SUBSTRING(KID FROM 1 FOR 1) FROM tbkurs; Die weiteren Funktionen existieren nicht 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, PostgreSQL, 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 SELECT kt.DauerPlan || ' Stunden' AS "Dauer", k.Kursbeginn, k.Kursende FROM tbkurs k INNER JOIN tbkursthema kt ON (k.KTHID = kt.KTHID); Kein REPLYACE 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, 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 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, 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 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, PostgreSQL, Oracle, 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, PostgreSQL, Oracle, 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 SELECT KID, Kurskennung, Kursbeginn, Kursende, DATEDIFF(Kursende, Kursbeginn)+1 FROM tbkurs; PostgreSQL, Oracle, 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 werdne 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 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; Firebird 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, 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 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 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 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, 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, PostgreSQL, SQL Server, Oracle, 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, PostgreSQL, SQL Server, Oracle, 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, PostgreSQL, Oracle, 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 Standdardabweichung) Ü5.7.4 PostgreSQL, Oracle 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.