2016-07-08 9 views
1

leere Zelle kehre ich zu Tische habensqL in subquery

eine Felder hat No_, PostingDate, Code mit Tabellenname „Transfers“ der andere hat No_, comment mit Tabellenname „Kommentare“

ein Transfer kann viele Kommentare haben

aber ich muss eine Abfrage erstellen, die alle Übertragungen und die Top-1-Kommentar von seinen Kommentaren aber und leere Kommentarspalte durchlaufen kann, wenn es keine Kommentare für diese Übertragung gibt.

SELECT th.[No_], th.[Posting Date] as 'PostingDate', 
     th.[Transfer-to Code] as 'Transfer_To', icl.Comment 
FROM dbo.[company$Transfer Header] as th, 
    dbo.[company$Inventory Comment Line] as icl 
where th.No_=icl.No_ 

Ich habe dies aber es gibt nur Transfers mit Kommentaren wie kann ich alle Transfers zurück bekommen und wenn Übertragung dass ein leerer Kommentar keinen Kommentar haben.

+0

Fügen Sie einige Beispieltabellendaten hinzu, und das erwartete Ergebnis! – jarlh

+0

Was bedeutet "aber und"? Bitte umformulieren Sie die Frage –

+0

Wechseln Sie in die moderne, explizite 'JOIN'-Syntax. Einfacher zu schreiben (ohne Fehler), zu lesen und in 'LEFT JOIN' zu konvertieren. – jarlh

Antwort

3

Verwenden Sie ein LEFT JOIN zusammen mit COALESCE die fehlenden NULL Werte mit einem leeren Kommentar zu ersetzen:

SELECT th.[No_], th.[Posting Date] as 'PostingDate', 
     th.[Transfer-to Code] as 'Transfer_To', 
     COALESCE(icl.Comment, '') 
FROM 
    dbo.[company$Transfer Header] AS th 
LEFT JOIN 
    dbo.[company$Inventory Comment Line] AS icl 
    ON th.No_ = icl.No_ 
+0

Will so schnell wie ich kann, aber Sie waren so schnell zu beantworten, dass ich das noch tun kann. – HellOfACode

1

ich geneigt sein könnte outer apply für diesen Einsatz:

SELECT th.[No_], th.[Posting Date] as PostingDate, 
     th.[Transfer-to Code] as Transfer_To, 
     COALESCE(icl.Comment, '') as Comment 
FROM dbo.[company$Transfer Header] as th OUTER APPLY 
    (SELECT TOP 1 icl.* 
     FROM dbo.[company$Inventory Comment Line] icl 
     WHERE th.No_ = icl.No_ 
    ) icl; 

Dies setzt voraus, dass Sie möchten, ein Kommentar und wenn keine Kommentare vorhanden sind, möchten Sie eine leere Zeichenfolge.

Hinweise:

  • Die Unterabfrage sollte eine ORDER BY Klausel haben, aber es ist unklar, wie Sie die eine Kommentar wählen möchten.
  • Verwenden Sie keine implizite Syntax JOIN.
  • Verwenden Sie nur einfache Anführungszeichen für String- und Datumskonstanten. Obwohl erlaubt, wenn ein Spaltenalias definiert wird, sind sie bei der Verwendung nicht erlaubt, was nur zu Verwirrung führt.