2009-03-30 20 views
22

Kişinin kimlik numarasını alan ve birkaç satır ve sütun döndüren bir tablo değeri işlevim var. Başka bir sorguda, birçok kişi hakkında çok fazla bilgi alan bir SELECT oluşturuyorum. Bir sütunu toplamak ve ana sorguma eklemek için ana sorgumdan bir kimlik numarasını işlevime nasıl geçirebilirim? Keşke bu kolay bir şekilde çalışacağından, bir tablo değeri fonksiyonuna sahip olmamamı isterdim, ancak bu işlev başka yerlerde kullanılıyor ve yeniden kullanmak istiyorum. Belki bu bir tablo-değeri fonksiyonu ile mümkün değildir ve bir skalar oluşturmak gerekir.Bir MSSQL sorgusuna tablo değeri işlevi ekleme

Benim asıl Sorgu şöyle görünür:

select id_num, name, balance 
from listOfPeople 

Ve tablo değerli işlev şuna benzer:

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 

:

calculatePersonalDiscount(id_number) 

ben böyle bir şey yapmak istiyorum Ancak, gerçekten aynı kapsam olmadığından, listOfPeople.id_num işlevine geçemezsiniz. bir sol dış birleşim denk olarak

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

Aynı şekilde bir DIŞ orada GEÇERLİ oluyor sözdizimi:

cevap

41

SQL Server 2005'te Eğer CROSS APPLY syntax kullanabilirsiniz.

+0

Bu, hala SQL Server 2008 ve 2012'de çalışmaktadır ve "gitmekten" hayal edemiyorum. Google'a yaptığım belirli bir soruya güzel bir cevap vermek için +1, çünkü sözdizimini unutmuştum! – NateJ

+0

Çalışıyor. Teşekkür ederim –