Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Procedura składowana, lewe sprzężenie daje mi zduplikowane wiersze, ale chcę wiersz górny(1) dla każdego rekordu o tym samym identyfikatorze

Najpierw szukałem czegoś, co nie da mi pustych kolumn z lewym złączeniem, więc użyłem,

coalesce(TableC.SomeColumn, -1) As SomeColumnHeHe

Potem natknąłem się na problem, w którym musiałem wybrać tylko top 1 z lewego połączenia, więc użyłem OUTER APPLY, jak pokazano poniżej,

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Składnia zapytania aktualizującego SQL z wewnętrznym sprzężeniem

  2. SUBSTRING vs LEFT w SQL SERVER

  3. NodeJS MSSQL WHERE IN Przygotowana instrukcja SQL

  4. Jak wygenerować skrypty upuszczania unikalnych ograniczeń w bazie danych SQL Server — samouczek SQL Server / TSQL część 99

  5. SQL — muszę podzielić całkowitą wartość na wiele wierszy w innej tabeli