Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Khi nào sử dụng toán tử bảng ÁP DỤNG

Trước hết - với apply bạn có thể gọi các hàm có giá trị bảng nơi các giá trị tham số được lấy từ bảng bạn truy vấn, tương tự như sau:

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

hoặc cắt nhỏ các cột 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) 

Từ ngày hết hạn của tôi, apply rất hữu ích khi bạn phải thực hiện một số tính toán trước :

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

một ví dụ khác về việc sử dụng apply bỏ chia sẻ hoạt động:

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)

cuối cùng, đây là truy vấn của bạn được triển khai theo điều khoản của SQL 2005 mà không sử dụng áp dụng :

;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

xem sql fiddle ví dụ




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Các phương pháp tốt nhất để chạy tổng - được cập nhật cho SQL Server 2012

  2. Sử dụng các biến trong truy vấn tạo ra các sơ đồ truy vấn khác nhau

  3. Có cách nào nhanh chóng để kiểm tra xem BẤT KỲ cột nào là NULL không?

  4. SQL Server Check / NoCheck sự khác biệt trong các tập lệnh được tạo

  5. SQL nếu Bản ghi bằng bản ghi trước nó