2016-08-02 12 views
0

私は2つのテーブル、連絡先、アカウントを持っています。私はここで、同じ親に関連付けられたレコード数を取得する一般的な関数を作成しようとしています私が持っているものです。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

あなたは実際にの兄弟について話しています?私は思う... Concatsとアカウントと何が本当に必要子供のカウントであるとのnは関係

を:あなたのクエリでは、あなたも、あなたは1を持っていることを...私が思うに、テーブルContactsを触れないでくださいこれは、このように非常に簡単に行うことができます。

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 

はあなたが必要とする1行に結果を減らすためにWHEREAND [email protected]を追加...

+0

おかげで、私は数を返すように関数として使用していますし、メッセージ444、レベル16、状態2、プロシージャSiblingCount、行8を取得します。 関数内に含まれるSelectステートメントは、クライアントにデータを返すことはできません。 –

+0

スカラーのint値を返す関数が本当に必要な場合は、既に行ったことを実行する必要があります。変数を宣言し、SELECT @ Result = Count(*)... WHERE c.ContactID = @ IDValue'この場合は 'GROUP BY'を手放すことができます)、変数を返します。しかし、これは最善のアプローチであることは間違いありません...非常に手続き的な臭いが... – Shnugo