sql >> Databáze >  >> RDS >> Sqlserver

Kdy použít operátor tabulky POUŽÍT

Za prvé - pomocí apply můžete volat funkce s hodnotou tabulky kde jsou hodnoty parametrů převzaty z tabulky, kterou se dotazujete, něco jako toto:

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

nebo skartování xml sloupců

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 mé zkušenosti apply je velmi užitečné, když musíte provést nějaký předběžný výpočet :

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

další příklad použití apply je unpivot operace:

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)

konečně zde je váš dotaz implementováno v podmínkách SQL 2005 bez použití použít :

;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

viz sql housle příklad




  1. Jak bezpečně a efektivně získáte ID řádku po vložení pomocí mysql pomocí MySQLdb v pythonu?

  2. NOT IN výběr s hodnotami NULL

  3. MySql:nastavte proměnnou se seznamem

  4. Jak načíst pomocí hodnoty proměnné Refcursor