Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 4带计数查询的表联接_Sql Server - Fatal编程技术网

Sql server 4带计数查询的表联接

Sql server 4带计数查询的表联接,sql-server,Sql Server,我使用的SQL Server数据库有4个表,如下所示: Product表:Product\u id是表的主键: | Product_id | Product_name | Description | 项目表:项目id是表的主键,产品id是产品表的外键 | Project_id | Project_name | Project_start_date | Product_id | | Participant_id | Participant_name | Participant_email |

我使用的SQL Server数据库有4个表,如下所示:

Product表:
Product\u id
是表的主键:

| Product_id | Product_name | Description |
项目表:
项目id
是表的主键,
产品id
产品
表的外键

| Project_id | Project_name | Project_start_date | Product_id |
| Participant_id | Participant_name | Participant_email | Project_ID |
Participant表:
Participant\u id
是表的主键,
Project\u id
Project
表的外键

| Project_id | Project_name | Project_start_date | Product_id |
| Participant_id | Participant_name | Participant_email | Project_ID |
Response表:
Response\u id
是表的主键,
participant\u id
participant
表的外键

| Project_id | Project_name | Project_start_date | Product_id |
| Participant_id | Participant_name | Participant_email | Project_ID |
我的问题是,我是否可以将所有4个表连接在一起,列出产品名称、项目名称、参与者电子邮件,并获得每个项目的参与者数量以及每个项目的所有回复

编辑: 我觉得最好把代码放在这里。这是我尝试过的,所以请不要告诉我只使用加入

这是我从所有参与者那里得到的代码:

SELECT
    projects.Project_ID,
    count(*) total_Participants,
    projects.Project_Name,
    projects.Product_ID,
    products.Product_Name
FROM
    Project projects
INNER JOIN Participant participant on
    projects.Project_ID = participant.Project_ID
INNER JOIN Products products ON
    products.Product_ID = projects.Product_ID
group by
    projects.Project_ID,
    projects.Project_Name,
    projects.Product_ID,
    products.Product_Name,
    projects.Project_ID
ORDER BY
    projects.Project_ID DESC
这是我得到的全部回复代码:

SELECT
    projects.Project_ID,
    count(*) total_Participants,
    projects.Project_Name,
    projects.Product_ID,
    products.Product_Name
FROM
    Project projects
INNER JOIN Participant participant on
    projects.Project_ID = participant.Project_ID
INNER JOIN Products products ON
    products.Product_ID = projects.Product_ID
INNER JOIN Response Response ON
    Response.Participant_ID = participant.Participant_ID
group by
    projects.Project_ID,
    projects.Project_Name,
    projects.Product_ID,
    products.Product_Name,
    projects.Project_ID
ORDER BY
    projects.Project_ID DESC

这是一种我可以使用一个查询语句来获取参与者的电子邮件、总参与者和总响应的方法吗?

如果没有您预期结果的示例,这是我能想到的最好的方法

一些样本数据:

declare @product table
(
    product_id int,
    product_name nvarchar(20)
);
insert into @product (product_id, product_name) values
(1, 'Product ABC'),
(2, 'Product DEF'),
(3, 'Product GHI');


declare @project table
(
    project_id int,
    project_name nvarchar(20),
    product_id int
);
insert into @project (project_id, project_name, product_id) values
(1, 'Project 001', 1),
(2, 'Project 002', 1),
(3, 'Project 003', 2),
(4, 'Project 004', 3);


declare @participant table
(
    participant_id int,
    participant_name nvarchar(20),
    participant_email nvarchar(20),
    project_id int
);
insert into @participant (participant_id, participant_name, participant_email, project_id) values
(1, 'Andy', 'andy@host.org', 1),
(2, 'Beatrice', 'beatrice@host.org', 1),
(3, 'Charles', 'charles@host.org', 2),
(4, 'Charles', 'charles@host.org', 4),
(5, 'David', 'david@host.org', 3),
(6, 'Eve', 'eve@host.org', 2);


declare @response table
(
    response_id int,
    response_content nvarchar(100),
    participant_id int
);
insert into @response (response_id, response_content, participant_id) values
(1, 'please', 1),
(2, 'provide', 2),
(3, 'sample', 2),
(4, 'data', 3),
(5, 'next', 5),
(6, 'time', 4),
(7, 'thank', 6),
(8, 'you', 6),
(9, '>.<', 6);
这给了我:

product_name         project_name         participant_email    participant_count response_count
-------------------- -------------------- -------------------- ----------------- --------------
Product ABC          Project 001          andy@host.org        2                 3
Product ABC          Project 001          beatrice@host.org    2                 3
Product ABC          Project 002          charles@host.org     2                 4
Product ABC          Project 002          eve@host.org         2                 4
Product DEF          Project 003          david@host.org       1                 1
Product GHI          Project 004          charles@host.org     1                 1

是的,这是可能的,尝试一下,当你有一个尝试时,你被卡住了。并包括样本数据(作为DDL/DML)和预期结果以及您的尝试。是的。它被称为一个
JOIN
,你可以用它来
JOIN
表格。@Moon,你为什么想要参与者的电子邮件?当您试图获取项目级信息时。我建议您提供一份样本数据和预期结果。那会有帮助的