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

Kiedy używać operatora tabeli APLIKUJ

Po pierwsze - z apply możesz wywołać funkcje o wartościach z tabeli gdzie wartości parametrów są pobierane z tabeli, której dotyczy zapytanie, coś takiego:

select
    t1.col3, -- column from table
    f1.col1  -- column from function
from table1 as t1
    left outer join table2 as t2 on t2.col1 = t1.col1
    outer apply dbo.function1(t1.col1, t2.col2) as f1

lub niszczenie kolumn XML

select
    t1.col3,
    t.c.value('@value', 'int') as value
from table1 as t1
    -- table1.col1 is xml iike <Data @Value="...">...</Data>
    outer apply t1.col1.nodes('Data') as t(c) 

Z mojego doświadczenia apply jest bardzo przydatne, gdy musisz dokonać wstępnych obliczeń :

select
    t1.col3,
    a1.col1,  --calculated value
    a2.col1   -- another calculated value, first one was used
from table1 as t1
    outer apply (select t1.col1 * 5 as col1) as a1
    outer apply (select a1.col1 - 4 as col1) as a2

kolejny przykład użycia apply jest nieobrotowy operacja:

select
    t1.col1, c.name, c.value
from table1 as t1
    outer apply (
        select 'col1', t1.col1 union all
        select 'col2', t1.col2
    ) as c(name, value)

na koniec, oto Twoje zapytanie zaimplementowane pod kątem SQL 2005 bez użycia apply :

;with cte as (
    select
        y.Name, 
        y.hoursWorked,
        x.game,
        x.NumBets,
        row_number() over(partition by x.Name order by x.NumBets) as row_num
    from y
        left outer join x on x.Name = y.Name
)
select Name, hoursWorked, game, NumBets
from cte
where row_num <= 2
order by Name, NumBets desc

zobacz sql skrzypce przykład




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dziennik transakcji SQL Server, część 3:Podstawy rejestrowania

  2. Zapytanie FreeText COUNT w wielu tabelach jest bardzo wolne

  3. Co to jest STATYSTYKA XML w programie SQL Server?

  4. Entity Framework 5 i Amazon RDS — podstawowy dostawca nie powiódł się podczas otwierania.

  5. Instrukcja ExecuteNonQuery for SELECT sql nie zwraca żadnych wierszy