Anfänger sucht Hilfe

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:

  1. zwei Inner Joins, d.h. es werden Daten aus drei Tabellen abgerufen, die logische Verbindung steckt jeweils in der ON-Klausel der Joinbedingung
  2. Anzeige der Existenz eines Datensatzes mit bestimmten Eigenschaften, jeweils mit 1 („existiert“) oder 0 („existiert nicht“)
  3. Das Fragezeichen am Ende in der letzten WHERE-Bedingung; das ist ein Übergabeparameter.

Gruß

Sancho

Moien

  1. 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.

  1. 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