2016-07-05 6 views
0

ich die unten Abfrage haben, die ich verwende Datensätze abzurufen, die als NULL oder '' eingestellt mindestens eine der folgenden Spalten:SQL Felder erhalten, die für jeden Datensatz null/leer zurückgegeben

  • Mainimage
  • Zusammenfassung
  • Beschreibung

    DECLARE @missingFields varchar(100) 
    SET @missingFields = '' 
    
    SELECT 
    
    c.[UnitReference] as 'UnitRef', 
    t.[NodeName] as 'Property', 
    @missingFields as 'Field/s missing' 
    
    FROM [DetailPage] d 
    INNER JOIN [CRM] c 
    ON d.ItemID = c.ItemID 
    INNER JOIN 
    [Tree] t 
    ON d.[ID] = t.[ID] 
    
    WHERE (ISNULL(d.MainImage, '') = '' OR ISNULL(d.Summary,'') = '' OR ISNULL(d.[Description],'') = '') 
    AND c.[IsListed] = 1 AND c.[IsMarketed] = 1 
    

Dies gibt die Daten zurück, die ich möchte, aber ich muss auch eine Zeichenfolge erstellen, die auflistet, welche der Spalten für den zurückgegebenen Datensatz leer oder leer ist, z. "Main Image is empty, Description is empty" Wenn ein Datensatz leer ist MainImage und Description Spalten.

Ich habe versucht:

@missingFields = CASE WHEN ISNULL(MainImage, '') = '' THEN 'Main image is null' ELSE '' END -- etc... 

Aber ich kann das nicht enthalten mit den Datenabruf-Operationen. Wie würde ich das machen?

+0

Wird eines der Felder immer null sein? Können mehrere Felder auch null sein? – scsimon

+0

Warum wird eine Variable benötigt? Kannst du nicht einfach die case-Anweisung verwenden? Möchten Sie mit bis zu 3 verschiedenen Status reocrd? etwas wie 'Fall wenn isnull (d.mainimage, '') = '' dann 'Hauptbild ist Null' end & case wenn isnull (d.Description, '') = '' then 'Beschreibung ist Null' end as [ Felder fehlen] '? – xQbert

+0

Ein Feld ist nicht garantiert null. Mehrere Felder können für einen Datensatz ja null sein. – DGibbs

Antwort

2
SELECT c.[UnitReference] AS 'UnitRef', 
      t.[NodeName] AS 'Property', 
      (CASE 
       WHEN d.MainImage IS NULL 
       THEN 'Main Image is Null, ' 
       WHEN d.MainImage = '' 
       THEN 'Main Image is Empty, ' 
       ELSE '' 
      END)+ 
      (CASE 
       WHEN d.Summary IS NULL 
       THEN 'Summary is Null, ' 
       WHEN d.Summary = '' 
       THEN 'Summary is Empty, ' 
       ELSE '' 
      END)+ 
      (CASE 
       WHEN d.[Description] IS NULL 
       THEN 'Description is Null, ' 
       WHEN d.[Description] = '' 
       THEN 'Description is Empty, ' 
       ELSE '' 
      END) AS MissingFields 
    FROM [DetailPage] d 
    INNER JOIN [CRM] c 
    ON d.ItemID = c.ItemID 
    INNER JOIN [Tree] t 
    ON d.[ID] = t.[ID] 
    WHERE(d.MainImage IS NULL OR d.MainImage = '') 
    OR (d.Summary IS NULL OR d.Summary = '') 
    OR (d.[Description] IS NULL OR d.[Description] = '') 
    AND c.[IsListed] = 1 
    AND c.[IsMarketed] = 1 
+0

Hmm. Ich denke, das ist im Grunde der richtige Ansatz, aber was passiert mit dieser speziellen Abfrage, wenn einige der interessierenden Spalten leer sind und andere nicht? Erhalten Sie dann 'MissingFields' nicht auf" NULL "? –

+0

@John Ja, das ist, was ich gerade bekomme – DGibbs

+1

Die 'CASE' Ausdrücke benötigen eine 'ELSE'-Klausel, die eine leere oder leere Zeichenfolge ergibt. –