SQL-Abfragen erstellen
Um Listen per SQL zu erstellen, beschäftigen Sie sich bitte auch mit der Datenstruktur der Datenbank. 
Anlegen einer Tabelle mit SQL-Statement 
Legen Sie als erstes im Reporter  
  eine neue Tabelle an. Dazu gehen Sie auf "Datei" und "Neu" und wählen hier dann "Tabelle" aus.![]() 
Hier klicken Sie dann auf den Schalter  
![]() 
Hier wählen Sie dann  
![]() 
Gehen Sie nun auf den Schalter  
![]() 
Einfache Abfrage mit SELECT und FROM 
Um Tabelleninhalte einer relationalen Datenbank zu lesen, verwendet man den SELECT Befehl. Dieser besteht aus mehreren, in ihrer Reihenfolge festgelegten Teilen, auch Klauseln genannt. Jede Klausel beginnt mit einem Schlüsselwort. 
Im einfachsten Fall besteht der SELECT Befehl aus einer SELECT- und einer FROM-Klausel sowie dem abschließenden  
;(Semikolon):
SELECT * 
FROM COMPersonen; 
Dieser SQL-Code erstellt eine Abfrage aller Felder aus Tabelle COMPersonen. 
Einfache Abfrage mit SELECT und FROM mit ausgewählten Feldern 
In der Regel werden nicht alle Felder einer Tabelle benötigt und man möchte eine Auswahl an Feldern treffen: 
SELECT Name, Vorname 
FROM COMPersonen; 
Dieser SQL-Code erstellt eine Abfrage der Felder Name und Vorname aus der Tabelle COMPersonen. 
Eine Abfrage sortieren 
Mit dem Befehl ORDER BY lässt sich eine Sortierung festlegen. Im folgenden Beispiel sortieren wir nach Name und Vorname aufsteigend. 
SELECT Name, Vorname 
FROM COMPersonen 
ORDER BY Name, Vorname; 
Mit dem Befehl ORDER BY kann auch absteigend sortiert werden, wenn man den Befehl DESC hinter das Feld setzt, das absteigend sortiert werden soll. Im folgenden Beispiel sortieren wir nach Name aufsteigend und nach Vorname absteigend. 
SELECT Name, Vorname 
FROM COMPersonen 
ORDER BY Name, Vorname DESC; 
Spalten umbenennen mit Alias 
Mit einem sogenannten Alias über den Befehl AS kann man z.B. den Spaltennamen in der Liste festlegen: 
SELECT Name AS Nachname, Vorname 
FROM COMPersonen; 
Dieser SQL-Code erstellt eine Abfrage der Felder Name und Vorname aus der Tabelle COMPersonen, wo das Feld "Name" als Spalte "Nachname" angezeigt wird. 
WHERE - Abfrage mit Filter (Bedingungen) 
Wenn man Daten in einer SQL-Abfrage filtern möchte, funktioniert das mit dem Erstellen einer Bedingung über den Befehl WHERE. Dazu gibt es verschiedene Operatoren zum Vergleichen von Werten, die in den folgenden Beispielen erklärt werden. 
 
Mehrere Bedingungen Verknüpfen 
Verknüpfung mit logischem AND (Und) 
Wenn man mehrere Bedingungen hat, die alle erfüllt sein sollen, damit ein Datensatz angezeigt wird, nutzt man AND, um diese zu verbinden. 
AND - die ausgewählten Bedingungen müssen beide zutreffen, nur dann wird der Eintrag mit in die Liste übernommen 
Logiktabelle (Wahrheitstabelle):  
 
Beispiel: 
SELECT Vorname, Name 
FROM COMPersonen 
WHERE Geburtsdatum > #12/31/1989# AND Ort="Jena"; 
Diese Abfrage zeigt Personen an, die die nach dem 31.12.1989 geboren wurden und im Ort Jena wohnen. 
Verknüpfung mit logischem OR (Oder) 
Wenn man mehrere Bedingungen hat, von denen mindestens eine erfüllt sein soll, nutzt man OR, um diese zu verbinden. 
OR – die ausgewählten Bedingungen können beide zutreffen. Das bedeutet, wenn eine oder beide Bedingungen zutreffen, wird der Eintrag mit in die Liste übernommen. 
Logiktabelle (Wahrheitstabelle): 
 
Beispiel: 
SELECT Vorname, Name 
FROM COMPersonen 
WHERE PLZ="07745" OR Ort="Jena"; 
Diese Abfrage zeigt Personen an, die die PLZ-Bereich 07745 oder im Ort Jena wohnen. 
Abfrage mit verknüpften Tabellen 
Zu der Haupttabelle COMPersonen, die die Personen enthält, gibt es noch Untertabellen, die mit dieser in Beziehung. Als Beispiel nehmen wir hier die Untertabelle COMPStatus, die die Mitgliedsarten aus dem Reiter Status / Funktionen enthält. 
Tabellen können mit einem z.B mit einem INNER JOIN und ON verbunden werden: 
SELECT Vorname, Name, [Status (Nr)], Von, Bis 
FROM COMPStatus INNER JOIN COMPersonen ON COMPStatus.[Person (Nr)] = COMPersonen.Nummer; 
Da auf dem Feld [Status (Nr)] die Mitgliedsart nur als Zahl erscheint, hängen wir nun noch die passende Voreinstellungstabelle COMStatus mit an, damit wir die Mitgliedsart im Klartext erscheint: 
SELECT Vorname, Name, Status, Von, Bis 
FROM (COMStatus INNER JOIN COMPStatus ON COMStatus.Nummer = COMPStatus.[Status (Nr)]) INNER JOIN COMPersonen ON COMPStatus.[Person (Nr)] = COMPersonen.Nummer; 
Kombinieren von verschiedenen Methoden 
Die genannten Abfrage-Möglichkeiten lassen sich natürlich auch kombinieren, um eine Abfrage ganz nach ihren Wünschen zu erzeugen. 
Im folgenden kurzen Beispiel erstellen wir eine Liste der Personen mit Ihren E-Mail-Adressen der Anschlussart "privat E-Mail" (Nr. 9) aufsteigend nach Name und absteigend nach Vorname. 
Dazu benötigen Sie die folgenden Tabellen: 
 
Das SQL-Statement für dieses Beispiel lautet: 
SELECT Name, Vorname, Telefon AS EMail 
FROM COMPersonen INNER JOIN COMPTelefone ON COMPersonen.Nummer =  COMPTelefone.[Person (Nr)] 
WHERE Telefon LIKE "*@*" AND [Anschluss (Nr)]  =  9 
ORDER BY Name, Vorname DESC; 
Erstellen einer Pivottabelle (Kreuztabelle) 
Eine Pivottabelle bietet sich an, wenn man Daten aus Untertabellen übersichtlich aufarbeiten möchte. Hier hat man die Möglichkeit z.B. die Anschlussarten der Kommunikationsdaten als Überschrift zu verwenden und darunter dann die jeweiligen Kommunikationsdaten zu erhalten. Dadurch kann man Datensätze, die mehrere Eintragungen in einer Untertabelle haben, in einer Zeile darstellen, statt mehrere Zeilen zu erhalten. 
Vergleich: 
Normale Tabelle: 
![]() 
Pivottabelle: 
![]() 
Eine Pivottabelle benötigt mindestens eine Zeilenüberschrift, eine Spaltenüberschrift und einen Wert, die wie folgt festgelegt werden. 
 
Das SQL-Statement für die oben gezeigte Pivottabelle lautet: 
TRANSFORM First(Telefon) AS Kommunikation 
SELECT Name, Vorname 
FROM COMAnschlüsse INNER JOIN (COMPersonen INNER JOIN COMPTelefone ON COMPersonen.Nummer = COMPTelefone.[Person (Nr)]) ON COMAnschlüsse.Nummer = COMPTelefone.[Anschluss (Nr)] 
GROUP BY Name, Vorname 
PIVOT Anschluss; 
In diesem Beispiel werden die Felder Name und Vorname aus COMPersonen als Zeilenüberschriften, Anschluss aus COMAnschlüsse als Spaltenüberschrift und Telefon unter dem Alias Kommunikation aus COMPTelefone als Wert verwendet.  
Erstellen einer Formel 
In SQL lassen sich natürlich auch Formeln zur Berechnung verwenden. Im folgenden Beispiel wird das aktuelle Alter aus dem Datum berechnet: 
SELECT Vorname, Name, Geburtsdatum, DateDiff("yyyy",[Geburtsdatum],Date())+(Format(Date(),"mmdd")<Format([Geburtsdatum],"mmdd")) AS [Alter] 
FROM COMPersonen; 
Man gibt die Formel dementsprechend im SELECT-Teil mit als Feld ein und benennt es mit der Alias-Funktion AS nach eigenem Belieben. 
Eingaben in einer SQL-Abfrage 
Es können über PARAMETERS auch Eingaben über eine SQL-Abfrage eingebaut werden, um eine Abfrage flexibler zu gestalten und nicht immer wieder die WHERE-Klausel anpassen zu müssen, wenn man einen anderen Wert abfragen möchte. 
Code: PARAMETERS [Variable] Datentyp; 
Mehrere Parameter werden mit einem Komma getrennt hintereinander gesetzt. 
Code: PARAMETERS [Variable1] Datentyp, [Variable2] Datentyp; 
Folgende Datentypen sind möglich: 
 
Im folgenden Beispiel soll beim Aufruf der SQL-Abfrage die PLZ eingegeben werden. 
PARAMETERS Eingabe string; 
SELECT Vorname, Name, PLZ 
FROM COMPersonen 
WHERE COMPersonen.PLZ=[Eingabe]; 
ACHTUNG: Diese Parameter müssen im Reporter auch als Eingabe angelegt werden, da es sonst zu folgender Fehlermeldung kommt: 
![]() 
Zum Erstellen der Eingabe klicken Sie bitte auf den Schalter  
![]() 
In der Maske Abfragebedingungen klicken Sie dann auf den Schalter  
![]() 
Hier tragen Sie dann die Eingaben ein für unser Beispiel als Frage "PLZ?" und als Typ "Text". Bestätigen Sie die Einstellungen mit  
![]() 
Beim Ausführen der Abfrage im Reporter erfolgt nun die folgende Abfrage: 
![]()  |