MS SQL Server Abfrage aus 2 Tabellen - fehlende Werte feststellen

Conny105

Grünschnabel
Lage:
2 Tabellen: Adressen, Zuordnungen
In der Adressentabelle ist der Typ(Spalte) Haushalte aufgenommen. Für diese Haushalte erfolgen über ein dazugehörendes Programm u.a. Zuordnungen eines anderen Typs (Haushaltshilfen).
Diese Zuordnungen sind in der 2. Tabelle mit den jeweils beiden IdentNr und den Daten "von" und "bis" und weiteren Informationen aufgenommen.
Zuordnungen erfolgen i.d.R. über einen Zeitraum vom 2 Monaten.
Auftrag:
Es soll festgestellt werden, welche aktiven Haushalte keine Zuordnungen haben, oder gibt es Haushalte bei denen eine Dauerzuordnung ( länger als 2 Monate ) vorhanden ist.
Mein Problem:
Mit dem folgenden SELECT habe ich zumindest Haushalte mit fehlenden Zuordnungen erhalten. Aber alle weiteren Versuche die Abfrage so zu erweitern, dass registrierte Zuordnungen länger als 2 Monate ermittelt werden, führten nur zu Fehlermeldungen.
SQL:
Select
aa.identifikation, aa.name, aa.vorname 
from Adressen aa
where aa.Typ = 'Haushalt' and aa.Aktiv = 1 and IBAN IS NOT NULL
          and aa.Identifikation NOT IN
(Select distinct ab.ID_Haushalt from Zuordnungen ab)

Besteht da Hoffnung auf eine Lösung??
Würde mich freuen
Gruß Conny105
 
Zuletzt bearbeitet von einem Moderator:
Etwas so

Mein Beispiel bei SQL Fiddle: http://sqlfiddle.com/#!6/240ac/8
SQL:
SELECT
  a.identifikation,
  -- Auswerten, warum die Adresse ein Problem  hat
  grund = CASE
  WHEN z.id_haushalt IS NULL
  THEN 'keine Zuordnung'
  ELSE CONCAT('Periode um ',DATEDIFF(day, DATEADD(MONTH, 2, z.von), z.bis), ' zu gross')
  END
FROM
  adressen a
  LEFT JOIN zuordnungen z
  ON a.identifikation = z.id_haushalt
WHERE
  -- [von] + 2 Monate müssen grösser als [bis] sein, oder es gibt keine Zuordnung
  (DATEADD(MONTH, 2, z.von) < z.bis
  OR z.id_haushalt IS NULL)
  -- Allgemienes Filtergedöns
  AND a.typ = 'Haushalt'
  AND a.aktiv = 1

-- TODO: warscheinlich Filter setzen, dass nur die aktiven Zuordnungen genommen werden

Nachtrag: Hab grad gesehen, ist ja MSSQL und nicht MySQL. Habs darum kurz umgeschrieben
 
Zuletzt bearbeitet:
Hallo Yaslaw,
erst einmal Danke für dieschnelle Antwort, und danke für die komplette Abfrage.
Ich habe sie in mein MS SQL Server Management Studio eingestellt und ausgeführt:
Leider kam die Fehlermeldung:
Meldung 195, Ebene 15, Status 10, Zeile 7
'CONCAT' wird nicht als Name einer integrierten Funktion erkannt.

Brauche weiterhin Hilfe.

Gruß
Conny 105
 
Ich habe null Erfahrung mit MS SQL.
Google doch mal nach CONCAT und deiner MS SQL Version. Dann wirst du schon fündig, wie man Strings zusammensetzt

Nachtrag gem. eminem SQLFiddle-Versuch kennt also MS SQL 2008 CONCAT nicht, jedoch MS SQL 2012 schon. Ergo arbeitest du mit MS SQL 2008.

Mit Google das folgende gefunden: http://blog.sqlauthority.com/2010/11/25/sql-server-concat-function-in-sql-server-sql-concatenation/

Somit sieht die Zeile mit dem CONCAT für dich so aus:
SQL:
  ELSE 'Periode um ' + CAST(DATEDIFF(day, DATEADD(MONTH, 2, z.von), z.bis) AS VARCHAR(10)) + ' zu gross'

Hier noch meine Lösung für MS SQL 2008 auf SQLFiddle: http://sqlfiddle.com/#!3/240ac/3
 
Zuletzt bearbeitet:
Zurück