2011-12-15 2 views
-1

私は2つの列projectIDSとServiceIDSを持っています。各プロジェクトには一連のサービスが用意されています。今私はパラメータとして渡すprojectIDのリストのための共通のサービスを取得するための手続きを書く必要があります。
即ち、iは入力パラメータとしてのPID(1,2,3)を渡した場合、それはすべてのプロジェクトに共通であるため同じテーブルの別の列を参照する入力パラメータに基づいて、ある列から値を選択するストアドプロシージャを作成します。

       PID  SID 
          ---  --- 
           1   1 
           1   2 
           1   3 
           2   1 
           2   2 
           3   1 
           3   3 

すぐiが出力としてSID = 1を取得する必要があると。 ありがとうございます

+1

研究努力の欠如のために下降する。通常、質問には「このように試してもうまくいかない」というバリエーションが反映されますが、どうすれば正しいことができますか? –

+0

あなたは多くの質問を1つに集めました。まず、ストアドプロシージャは入力のセットリストを必要とします。作成しているストアドプロシクには3つの入力しかありませんか、それとも動的なエントリ数を受け入れるのですか?後者の場合:SQLが存在するかどうかを調べるためにSQLをクローズしてください:http://stackoverflow.com/questions/977021/can-a-stored-procedure-have-dynamic-parameters-to-be-used-in-an-in-clause PIDのリストの間の共通の 'SID'は、実際にはいくつかの集約を使用するとかなり単純です。 – Twelfth

答えて

0

私はあなたがしようとしているのは、セット全体が一致するレコードを見つけることだと思います。

テーブルにこのセットがあると仮定し、これをソーステーブルにリンクします。これは、セットに含まれていないPIDを除外します。

次に、各SIDの一致数を数えます。 SIDのPIDの数がセット内のPIDの数と等しい場合は、一致します。

SELECT Sid 
FROM MyTable 
GROUP BY Sid 
HAVING Count(DISTINCT Pid) = 3