Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Кога да използвате табличния оператор APPLY

Първо - с apply можете да извикате функции с таблични стойности където стойностите на параметрите се вземат от таблицата, към която заявявате, нещо като това:

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

или раздробяване на 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) 

От моя опит, apply е много полезно, когато трябва да направите някакво предварително изчисление :

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

друг пример за използване на apply е отменен операция:

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)

най-накрая, ето вашето запитване имплементиран по отношение на SQL 2005 без използване на прилагане :

;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

вижте sql fiddle пример




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Изберете колони от една таблица въз основа на имената на колони от друга таблица

  2. Как да използвате SqlTransaction в C#

  3. Добавете колона към таблица със стойност по подразбиране, равна на стойността на съществуваща колона

  4. Предайте списък-структура като аргумент на съхранена процедура

  5. Как да използвате RANK() в SQL Server