2016-02-25 78 views
0

嗨,你必須表函數。 所述一個是如何加入兩個表函數

select * from [dbo].[GetMembersofGroupPolicy](21929,getdate()) 

此函數返回一個其中一個列名爲ENTITYID表。 我需要的是執行我的第二個表函數,它是

select * from dbo.GetFamilyMembers(EntityID) 

每個ENTITYID我會從第一個表中獲取as`結果。 是我的嘗試是

SELECT F.ParentID, F.Relation, GM.ID_SYMBOLAIOY, GM.TIN, 
    GM.[LastName Native], 
    GM.[FirstName Native], 
    GM.[LastName Eng], 
    GM.[FirstName Eng], 
    GM.DOB, 
    GM.EntryDate, 
    GM.EntityID, 
    GM.TerminationDate, 
    GM.isActive 
    FROM 
    dbo.GetMembersofGroupPolicy(21929, GETDATE()) AS GM 
    LEFT OUTER JOIN 
    (SELECT id_ypokat, ParentID, prnt, id_ontot_child, Relation 
    FROMdbo.GetFamilyMembers(GM.EntityID) AS GetFamilyMembers_1) AS F 
    ON GM.EntityID = F.id_ontot_child 

但我得到的是ENTITYID無法綁定錯誤。

任何人都可以幫我編輯這個查詢嗎?

回答

0

它看起來像您需要的APPLY和CROSS應用功能在SQL:

APPLY運算符可以讓您調用由一個外部表表達式返回的每一行的表值函數查詢。表值函數充當正確的輸入,而外部表格表達式充當左邊的輸入。對於左輸入的每一行評估正確的輸入,並將生成的行組合爲最終輸出。 APPLY運算符生成的列列表是左輸入中的一組列,後跟右輸入返回的列列表。

https://technet.microsoft.com/en-us/library/ms175156(v=sql.105).aspx

SELECT F.ParentID, F.Relation, GM.ID_SYMBOLAIOY, GM.TIN, 
GM.[LastName Native], 
GM.[FirstName Native], 
GM.[LastName Eng], 
GM.[FirstName Eng], 
GM.DOB, 
GM.EntryDate, 
GM.EntityID, 
GM.TerminationDate, 
GM.isActive 
FROM 
dbo.GetMembersofGroupPolicy(21929, GETDATE()) AS GM 
OUTER APPLY 
(SELECT id_ypokat, ParentID, prnt, id_ontot_child, Relation 
FROMdbo.GetFamilyMembers(GM.EntityID)) AS F 

希望這有助於或至少讓你在正確的軌道上

0

您不能將該行的值作爲派生表的一部分傳遞。你需要使用適用於此。

SELECT F.ParentID 
    , F.Relation 
    , GM.ID_SYMBOLAIOY 
    , GM.TIN 
    , GM. [LastName Native] 
    , GM.[FirstName Native] 
    , GM.[LastName Eng] 
    , GM.[FirstName Eng] 
    , GM.DOB 
    , GM.EntryDate 
    , GM.EntityID 
    , GM.TerminationDate 
    , GM.isActive 
FROM dbo.GetMembersofGroupPolicy(21929, GETDATE()) AS GM 
cross apply dbo.GetFamilyMembers(GM.EntityID) AS F 
where GM.EntityID = F.id_ontot_child 

Paul White在APPLY上有一篇很棒的2篇文章系列。

http://www.sqlservercentral.com/articles/APPLY/69953/

http://www.sqlservercentral.com/articles/APPLY/69954/

確保你真的有內聯表值函數在這裏。如果有多個查詢,性能可能會受到嚴重影響。

+0

由於這是工作正常!!!!! – Yannis

+0

我現在唯一的問題是,實際上我需要一個左連接。因爲現在只顯示了在第二個表函數中有值的記錄。你能幫忙嗎? – Yannis

+0

閱讀我引用的文章。 CROSS APPLY與內部連接類似。 OUTER APPLY與左連接類似。 –

0
SELECT * 
FROM [dbo].GetMembersofGroupPolicy(21929, GETDATE()) AS GM 

outer apply dbo.GetFamilyMembers(GM.EntityID) as F 

如果您想模仿內部聯接行爲,請使用交叉應用。