Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Procédure stockée, la jointure gauche me donne des lignes en double, mais je veux la ligne supérieure (1) pour chaque enregistrement avec le même ID

D'abord, je cherchais quelque chose qui ne me donnerait pas de colonnes nulles avec une jointure à gauche, alors j'ai utilisé,

coalesce(TableC.SomeColumn, -1) As SomeColumnHeHe

Ensuite, je suis tombé sur un problème où je n'avais besoin de sélectionner que le top 1 de la jointure gauche, j'ai donc utilisé OUTER APPLY, comme indiqué ci-dessous,

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