2009-03-30 12 views
22

人のID番号をとり、いくつかの行と列を返すテーブル値関数があります。別のクエリでは、多くの人に関する多くの情報を取得するSELECTを作成しています。どのように私のメインのクエリから私の関数に列を合計し、私のメインクエリに参加するID番号を渡すことができますか?テーブル値関数を持っていなかったのは簡単だが、この関数は他の場所で使用されていて再利用したいと思う。おそらく、これはテーブル値関数でも可能ではなく、スカラー値を作成する必要があります。テーブル値関数とMSSQLクエリの結合

私の主なクエリは次のようになります。

select id_num, name, balance 
from listOfPeople 

とテーブル値関数は次のようになります。

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) 

私のような何かをしたいと思いますしかし、実際には同じスコープではないので、関数にlistOfPeople.id_numを渡すことはできません。 LEFT OUTER結合の同等のため

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

同様OUTERが適用されています構文:

答えて

41

は、SQL Server 2005では、あなたはCROSS APPLY syntaxを使用することができます。

+0

これはSQL Server 2008と2012でも動作しますが、私はそれが「去っていく」ことは想像できません。私は文法を忘れてしまったので、私はGoogleに持っていた特定の質問に素敵な簡潔な答えを+1しました! – NateJ

+0

働いています。ありがとうございます –

関連する問題