【问题标题】:SQL query statement with condition and count带条件和计数的 SQL 查询语句
【发布时间】:2020-06-19 07:09:37
【问题描述】:

我有两张表,一张是Project,一张是Participant,participant表中的Project_ID是Project表的外键。 Project_Manager是项目经理的状态标志,当参与者是项目经理时,该字段为1。

项目表:

Project
----------
Project_ID (primiry key)
Project_Name

参与者表:

Participant
----------
Participant_ID (primiry key)
First_Name
Last_Name
Email
Project_Manager
Projecct_ID (foreign key)

我的问题是,我是否有可能在一个查询语句中获取给定项目 ID 中的参与者计数、该项目的经理姓名以及项目名称。

谁能帮帮我?

【问题讨论】:

    标签: sql-server database join select


    【解决方案1】:

    您可以加入和聚合:

    select 
        pr.project_name,
        pa.project_id, 
        count(*) no_participants,
        max(case when pa.project_manager = 1 then pa.last_name end) manager_last_name
    from participant pa
    inner join project pr on pr.project_id = pa.project_id
    group by pa.project_id
    

    【讨论】:

    • 它只适用于姓氏。我怎样才能得到全名而不是姓氏?我的意思是我可以将 first_name 和 last_name 连接在一起作为 full_name。现在,我可以按照您的逻辑添加另一个案例,然后以 first_name 结尾,但最好返回一个全名而不是我期望的单独。
    • @Moon:你需要在max()内连接,比如:max(case when pa.project_manager = 1 then concat(pa.first_name, ' ', pa.last_name) end) as manager_last_name
    【解决方案2】:
    SELECT COUNT(1) NUMBERS,PA.PROJECT_MANAGER,PR.PROJECT_NAME 
    FROM PARTICIPENT PA INNER JOIN PROJECT PR 
    ON PA.PROJECT_ID = PR.PROJECT_ID 
    WHERE PA.PROJECT_ID =100 
    GROUP BY PR.PROJECT_NAME,PA.PROJECT_MANAGER
    

    【讨论】:

    • 虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。
    • 嗨唐老鸭,你的建议是有效的,我完全接受你的建议......而且,我也看到你的答案作为样本......这些太好了,你的解释是用户友好的.
    猜你喜欢
    • 1970-01-01
    • 2014-04-09
    • 2022-07-07
    • 1970-01-01
    • 2011-10-27
    • 2014-09-21
    • 2015-03-28
    • 2021-02-21
    • 1970-01-01
    相关资源
    最近更新 更多