-4

データベースに 4 つのテーブルがあります。

  • person(Perid,firstname,lastname,gender)
  • リサーチ (Resid , Resname ,stareddate)
  • person_research(Resid , Perid , その他)
  • スーパーバイザー ( Resid 、 Supervisorid 、その他)

結果をdatagridviewに入れるために、各研究者と研究者名とスーパーバイザー名を返すストアドプロシージャを書きたいと思います。

4

2 に答える 2

1

あなたはDBMSを指定しなかったので、私はPostgreSQLを想定しています。

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$
于 2012-04-05T14:11:17.400 に答える
0

SQL サーバーの場合:

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
于 2012-04-05T14:15:20.570 に答える