【问题标题】:How I can write the following stored procedure? [closed]我如何编写以下存储过程? [关闭]
【发布时间】:2012-04-05 14:01:05
【问题描述】:

我在数据库中有四个表。

  • 人(Perid,firstname,lastname,gender)
  • 研究(Resid,Resname,stareddate)
  • person_research(Resid , Perid , 其他)
  • 主管(Resid、Supervisorid、其他)

我想编写存储过程,返回每个研究人员姓名和主管姓名,以便将结果放入 datagridview。

【问题讨论】:

  • 你试过什么?对于什么数据库?这听起来像是rent-a-coder.com 的工作......
  • “我想写存储过程”——什么阻止了你?
  • 如果您能展示您尝试过的内容以及一些示例数据和您的预期结果,那就太好了。

标签: sql stored-procedures


【解决方案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$

【讨论】:

    【解决方案2】:

    对于 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
    

    【讨论】:

    • 当研究有多个主管时,datagridview重复记录。我可以将两行合并为一个研究吗?
    • 你怎么知道你想要哪个主管?
    • 很抱歉,但出现错误消息“没有聚合功能”
    • 我删除了group by,如果有多个,你如何决定要哪个主管?
    • 我可以将两个主管姓名 (name1 + name2) 合并到 datagridview 的同一单元格中进行一项研究..非常感谢您的帮助
    猜你喜欢
    • 2014-08-10
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多