Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Stored procedure, left join me dá linhas duplicadas, mas eu quero linha top(1) para cada registro com o mesmo ID


Primeiro eu estava procurando por algo que não me desse colunas nulas com junção esquerda, então usei,
coalesce(TableC.SomeColumn, -1) As SomeColumnHeHe

Então me deparei com um problema em que eu precisava selecionar apenas o top 1 da junção esquerda, então usei OUTER APPLY, conforme mostrado abaixo,
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