2016-08-02 65 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