2012-04-05 23 views
-4

データベースに4つのテーブルがあります。次のストアドプロシージャはどのように記述できますか?

  • 人(Perid、ファーストネーム、姓、性別)
  • 研究(ルシ、resnameは、stareddate)
  • person_research(ルシ、Perid、その他)
  • 監督(ルシ、Supervisorid、その他)

私は、結果をDataGridViewに入れるための各リサーチおよび研究者の名前とスーパーバイザー名を返すストアドプロシージャを記述したいと思います。

+9

あなたは何を試してみましたか?どのデータベースのために?これはrent-a-coder.comの仕事のように思えます... –

+0

あなたはどのDBMSを使用していますか? –

+4

"私はストアドプロシージャを書きたい" - 何があなたを止めていますか? –

答えて

0

を:

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

CREATE PROCEDURE dbo.test 
AS 
BEGIN 

    SET NOCOUNT ON; 

    SELECT R.resname as researchname 
     , (p1.firstname + p1.lastname) as researcher 
     , (p2.firstname + p2.lastname) as supervisor 
    FROM Research R 
    JOIN person_research PR 
     ON R.Resid = PR.Resid 
    JOIN person p1 
     on PR.Perid = p1.Perid 
    JOIN supervisors s 
     on R.Resid = s.Resid 
    JOIN person p2 
     on PR.Perid = p2.Perid 
END 
GO 
+0

研究に多くの監督者がいる場合は、同じ研究のために2つの行を1つに統合することができます。 – redrose

+0

あなたはどのスーパーバイザを知りたいですか? – Taryn

+0

私は申し訳ありませんが、エラーメッセージ '集約機能なし'が表示されます – redrose

1

あなたはので、私は、PostgreSQLを仮定しているDBMSが指定されていませんでした:SQLサーバーの

create or replace function get_researchers() 
    returns table(research_name, researchers, supervisors) 
    language sql 
AS 
$body$ 
    select r.resname as research_name, 
     string_agg(p.firstname||' '||p.lastname, ',') as researchers, 
     string_agg(sp.firstname||' '||sp.lastname, ',') as supervisors 
    from research r 
    join person_research pr on pr.resid = r.resid 
    join person p on pr.perid = p.perid, 
    join supervisors s on s.resid = r.resid 
    join person sp on sp.perid = s.perid 
    group by r.resname 
    order by r.resname; 
$body$ 
関連する問題