データベースに 4 つのテーブルがあります。
- person(Perid,firstname,lastname,gender)
- リサーチ (Resid , Resname ,stareddate)
- person_research(Resid , Perid , その他)
- スーパーバイザー ( Resid 、 Supervisorid 、その他)
結果をdatagridviewに入れるために、各研究者と研究者名とスーパーバイザー名を返すストアドプロシージャを書きたいと思います。
データベースに 4 つのテーブルがあります。
結果をdatagridviewに入れるために、各研究者と研究者名とスーパーバイザー名を返すストアドプロシージャを書きたいと思います。
あなたは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$
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