2009-03-30 38 views
22

Tôi có hàm giá trị bảng có số ID của một người và trả về một vài hàng và cột. Trong một truy vấn khác, tôi đang tạo một SELECT để truy xuất rất nhiều thông tin về nhiều người. Làm thế nào tôi có thể chuyển một số id từ truy vấn chính đến hàm của tôi để tổng hợp một cột và kết hợp nó với truy vấn chính của tôi? Tôi ước gì tôi không có chức năng giá trị bảng vì nó sẽ hoạt động dễ dàng, tuy nhiên, chức năng này được sử dụng ở nơi khác và tôi muốn sử dụng lại nó. Có lẽ điều này thậm chí không thể thực hiện được với hàm giá trị bảng và tôi cần tạo một hàm vô hướng.Tham gia hàm giá trị bảng vào truy vấn MSSQL

Query chính của tôi trông như thế này:

select id_num, name, balance 
from listOfPeople 

Và chức năng bảng có giá trị như sau:

calculatePersonalDiscount(id_number) 

Tôi muốn làm điều gì đó như:

select id_num, name, balance 
from listOfPeople 
left join 
(
    SELECT id_num, SUM(discount) 
    FROM calculatePersonalDiscount(listOfPeople.id_num) 
) x ON x.id_num = listOfPeople.id_num 

Nhưng bạn không thể chuyển listOfPeople.id_num vào hàm vì nó không thực sự là phạm vi tương tự.

Trả lời

41

Trong SQL Server 2005 bạn có thể sử dụng CROSS APPLY syntax: cú pháp

select id_num, name, balance, SUM(x.discount) 
from listOfPeople 
    cross apply dbo.calculatePersonalDiscount(listOfPeople.id_num) x 

Tương tự có của một OUTER ÁP DỤNG cho tương đương với một LEFT OUTER JOIN.

+0

Điều này vẫn hoạt động trên SQL Server 2008 & 2012 và tôi không thể tưởng tượng nó "biến mất". 1 cho một câu trả lời ngắn gọn cho một câu hỏi cụ thể mà tôi đã có với Google bởi vì tôi đã quên cú pháp! – NateJ

+0

Nó đang hoạt động.Cảm ơn bạn –

Các vấn đề liên quan