Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Kapan menggunakan operator tabel BERLAKU

Pertama-tama - dengan apply Anda dapat memanggil fungsi bernilai tabel di mana nilai parameter diambil dari tabel yang Anda kueri, seperti ini:

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

atau menghancurkan kolom 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) 

Dari pengalaman saya, apply sangat berguna ketika Anda harus membuat beberapa pra-perhitungan :

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

contoh lain dari penggunaan apply adalah tidak berputar operasi:

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)

akhirnya, inilah permintaan Anda diimplementasikan dalam SQL 2005 tanpa menggunakan 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

lihat sql fiddle contoh




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sudah ada objek bernama '#columntable' di database

  2. Tentukan nama tabel secara dinamis dalam menjalankan tugas SQL untuk pernyataan CREATE TABLE

  3. Dapatkan hitungan persen catatan dalam satu kueri

  4. Apa cara yang tepat untuk mengisi DropDownList dari database?

  5. Perbaiki "Setidaknya salah satu argumen untuk COALESCE harus berupa ekspresi yang bukan konstanta NULL" di SQL Server