2012-04-05 5 views
-4

У меня есть четыре таблицы в базе данных.Как я могу написать следующую хранимую процедуру?

  • человек (Perid, Firstname, фамилия, пол)
  • исследований (Resid, ResName, stareddate)
  • person_research (Resid, Perid, другие)
  • Надзорные (Resid, SupervisorID, другие)

Я хочу написать хранимую процедуру, которая возвращает каждое имя исследователя и исследователя и имена супервизора для размещения результатов в datagridview.

+9

Что вы пробовали? Для какой базы данных? Это звучит как работа в rent-a-coder.com ... –

+0

Какая СУБД вы используете? –

+4

«Я хочу написать хранимую процедуру» - что вас останавливает? –

ответ

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 
+0

, когда в исследовании есть много супервизоров, запись datagridview duplicates.can я могу объединить две строки в одном для тех же исследований? – redrose

+0

как вы знаете, какой руководитель вы хотите? – Taryn

+0

Я сожалею, но появилось сообщение об ошибке «no aggregate funcation» – redrose

1

Вы не указали СУБД поэтому я предполагаю, что 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$ 
Смежные вопросы