Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Gespeicherte Prozedur, Linksverknüpfung gibt mir doppelte Zeilen, aber ich möchte die obere (1) Zeile für jeden Datensatz mit derselben ID

Zuerst habe ich nach etwas gesucht, das mir keine Nullspalten mit Linksverknüpfung gibt, also habe ich verwendet,

coalesce(TableC.SomeColumn, -1) As SomeColumnHeHe

Dann bin ich auf ein Problem gestoßen, bei dem ich nur die oberste 1 aus der linken Verknüpfung auswählen musste, also habe ich OUTER APPLY verwendet, wie unten gezeigt,

SELECT Top(1)
    TableA.*,
        TableB.*,
        someFunction(TableA.ID),
        coalesce(TableC.someColumn, -1) As SomeColumnExample,
        TempTable.IDA
 FROM 
    TableA INNER JOIN TableB ON TableA.ID = TableB.IDA
    OUTER APPLY
         (SELECT TOP(1) * FROM TableC where TableC.IDA = TableA.IDA Order By DateAdded Desc )  As TempTable

Where TableA.ID = @ParaID
Order By TableC.DateTime Desc