2016-08-02 56 views
0

我有兩個表,聯繫人,帳戶。我想創建一個將得到與相同父相關記錄數的一般功能,這裏是我有:SQL Server兄弟會記錄計數

CREATE FUNCTION [dbo].[SiblingCount](
@IDValue Integer 
) 
RETURNS Integer AS 
BEGIN 
     DECLARE @Result integer 

     Select @Result = Count(a.AccountID) 
     from Account a 
     where a.Status <> 'Active' and 
     a.ContactID = (select a2.ContactID 
     from Account a2 where a2.Accounnts = @IDValue) 

     RETURN @Result 
END 

GO 

有沒有更好的辦法做到這一點?

回答

1

你真的在談論兄弟姐妹?在您的查詢,你甚至不碰桌子Contacts ......我想,你有一個1:N Concats和帳戶,你真正需要的是孩子數之間的關係......

我想可以這樣做很容易像這樣:

SELECT c.ContactID,COUNT(*) AS CountAccounts 
FROM Contacts AS c 
INNER JOIN Accounts AS a ON c.ContactID=a.ContactID 
WHERE a.Status<>'Active' 
GROUP BY c.ContactID 

添加AND [email protected]WHERE的結果減少你所需要的一行...

+0

謝謝,我使用的函數返回計數和我收到Msg 444,Level 16,State 2,Procedure SiblingCount,Line 8包含在函數中的選擇語句不能將數據返回給客戶端。 –

+0

如果你真的需要一個返回標量int值的函數,你必須做你已經做過的事情:聲明一個變量,使用'SELECT @ Result = Count(*)... WHERE c.ContactID = @IDValue'(你在這種情況下可以放棄'GROUP BY')並返回變量...但是我懷疑,這是最好的方法......氣味非常程序化...... – Shnugo