Moien
Normalerweise sieht man SQL-Abfragen ja an was sie tun, aber diesmal…
Das Monster hier wurde mir vorgesetzt. Es fällt auch das richtige raus. Aber wieso weiss keiner. Kennt jemand einen Formater/Tool der mir das in Unterabfragen imt Zwischenresultaten aufdrösselt ? Geht um MS SQL.
SELECT cicntp.cnt_id, cicntp.cmp_wwn, CONVERT(smallint,CASE WHEN cicntp.cnt_id = cicmpy.cnt_id THEN 1 ELSE 0 END) AS Main, cicntp.active_y, WebAccess, pred.abbreviation, cicntp.initials, cicntp.fullname, cicntp.cnt_f_tel, cicntp.cnt_f_mobile, cicntp.cnt_job_desc, cicntp.cnt_dept, cicntp.textfield1, cicntp.textfield2, cicntp.textfield3, cicntp.textfield4, cicntp.textfield5, CAST((SELECT CASE WHEN EXISTS(SELECT ContactPerson FROM Addresses WHERE Type=‚VIS‘ AND Addresses.ContactPerson=cicntp.cnt_id) THEN 1 ELSE 0 END) AS tinyint) AS VIS, CAST((SELECT CASE WHEN EXISTS(SELECT ContactPerson FROM Addresses WHERE Type=‚POS‘ AND Addresses.ContactPerson=cicntp.cnt_id) THEN 1 ELSE 0 END) AS tinyint) AS POS, CAST((SELECT CASE WHEN EXISTS(SELECT ContactPerson FROM Addresses WHERE Type=‚DEL‘ AND Addresses.ContactPerson=cicntp.cnt_id) THEN 1 ELSE 0 END) AS tinyint) AS DEL, CAST((SELECT CASE WHEN EXISTS(SELECT ContactPerson FROM Addresses WHERE Type=‚INV‘ AND Addresses.ContactPerson=cicntp.cnt_id) THEN 1 ELSE 0 END) AS tinyint) AS INV, cicntp.cnt_email, cicntp.taalcode FROM cicntp INNER JOIN Pred on pred.predcode = cicntp.predcode INNER JOIN cicmpy ON cicntp.cmp_wwn=cicmpy.cmp_wwn WHERE cicntp.cmp_wwn = ? ORDER BY cicntp.active_y DESC
Danke
Hallo,
wenn Das für SQL-Server ist, kannst Du den Enterprise Manager Nutzen. Dort gehst Du auf Server->auf die DB-> auf Tabellen -> auf irgendeine Tabelle -> rechte Maustaste -> Inhalt anzeigen -> alles anzeigen.
Dann oben im Menu (Toolbar) auf SQL und den SQL-Befehl reinkopiert. Nach dem Ausführen ist er dann formatiert und teilweise optimiert.
Gruß
Peter
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Mahlzeit,
du kannst natürlich versuchen, den Krempel durch ein Tool formatieren zu lassen. Wenn du das aber selbst tust, wirst du womöglich mehr verstehen.
Mein Vorschlag
SELECT cicntp.cnt\_id,
cicntp.cmp\_wwn,
CONVERT(SMALLINT, CASE WHEN cicntp.cnt\_id = cicmpy.cnt\_id THEN 1 ELSE 0 END) AS Main,
cicntp.active\_y,
WebAccess,
pred.abbreviation,
cicntp.initials,
cicntp.fullname,
cicntp.cnt\_f\_tel,
cicntp.cnt\_f\_mobile,
cicntp.cnt\_job\_desc,
cicntp.cnt\_dept,
cicntp.textfield1,
cicntp.textfield2,
cicntp.textfield3,
cicntp.textfield4,
cicntp.textfield5,
CAST((SELECT CASE WHEN EXISTS(SELECT ContactPerson
FROM Addresses
WHERE TYPE='VIS'
AND Addresses.ContactPerson=cicntp.cnt\_id)
THEN 1
ELSE 0
END) AS tinyint) AS VIS,
CAST((SELECT CASE WHEN EXISTS(SELECT ContactPerson
FROM Addresses
WHERE TYPE='POS'
AND Addresses.ContactPerson=cicntp.cnt\_id)
THEN 1
ELSE 0
END) AS tinyint) AS POS,
CAST((SELECT CASE WHEN EXISTS(SELECT ContactPerson
FROM Addresses
WHERE TYPE='DEL'
AND Addresses.ContactPerson=cicntp.cnt\_id)
THEN 1
ELSE 0
END) AS tinyint) AS DEL,
CAST((SELECT CASE WHEN EXISTS(SELECT ContactPerson
FROM Addresses
WHERE TYPE='INV'
AND Addresses.ContactPerson=cicntp.cnt\_id)
THEN 1
ELSE 0
END) AS tinyint) AS INV,
cicntp.cnt\_email,
cicntp.taalcode
FROM cicntp
INNER JOIN Pred
ON pred.predcode = cicntp.predcode
INNER JOIN cicmpy
ON cicntp.cmp\_wwn=cicmpy.cmp\_wwn
WHERE cicntp.cmp\_wwn = ?
ORDER BY cicntp.active\_y DESC
Die Abfrage hat drei Besonderheiten:
- zwei Inner Joins, d.h. es werden Daten aus drei Tabellen abgerufen, die logische Verbindung steckt jeweils in der ON-Klausel der Joinbedingung
- Anzeige der Existenz eines Datensatzes mit bestimmten Eigenschaften, jeweils mit 1 („existiert“) oder 0 („existiert nicht“)
- Das Fragezeichen am Ende in der letzten WHERE-Bedingung; das ist ein Übergabeparameter.
Gruß
Sancho
Moien
- zwei Inner Joins, d.h. es werden Daten aus drei Tabellen
abgerufen, die logische Verbindung steckt jeweils in der
ON-Klausel der Joinbedingung
OK, daher kommt das Zeug also. Hatte den 2. nicht gesehen/verstanden.
- Anzeige der Existenz eines Datensatzes mit bestimmten
Eigenschaften, jeweils mit 1 („existiert“) oder 0 („existiert
nicht“)
Und da es keinen einzigen solchen Datensatz gibt fällt das auch raus.
Danke, hat geholfen.
Moien
wenn Das für SQL-Server ist, kannst Du den Enterprise Manager
Nutzen.
Danke für den Vorschlag.
*grummel … Es wär so schön wenn dieser Laden Zugriff auf den Server erlauben würde. Oder gar die Installation eines lokalen TestDB-server … grummel*
Werd’s mir heute abend zuhause mal zur Gemüte führen.
danke