Sql 如何在select语句(而不是where子句)中使用集合进行查询

Sql 如何在select语句(而不是where子句)中使用集合进行查询,sql,oracle,Sql,Oracle,我有两张桌子。父表父表与子表具有一对多关系。 父表Pa_Projects_all和子表Pa_Projects_players 它们由person\u id连接 假设我有一个项目,项目id=1001 Project Id Project Name 1001 This is a project 项目参与者已经 查询应该有如下内容 Select Project_Id, Person_id, Name from Pa_projects_all a, Pa_project_pl

我有两张桌子。父表父表与子表具有一对多关系。 父表Pa_Projects_all和子表Pa_Projects_players 它们由person\u id连接

假设我有一个项目,项目id=1001

Project Id Project Name      
1001       This is a project 
项目参与者已经

查询应该有如下内容

Select Project_Id, Person_id, Name
from Pa_projects_all a, Pa_project_players b
where a.person_id = b.person_id
and a.project_id = 1001;
预期的结果是

Project Id Person Id  Name
1001        500       John Smith
            501       Peter Carpenter
            502       Steve Sun
其中,personid和Name列是我认为应该是一个集合

查询将进入XML Publisher的数据定义中,结果将显示在Excel中

所以在Excel中,A列=项目Id,B列=人员Id,C列=姓名。 Excel中的一行用于显示结果。 换句话说,每个项目id一个Excel行


这可能吗?

如果希望在SQL*Plus中包含此报告,则可以使用BREAK ON语句

SQL> break on Project_Id
SQL> Select Project_Id, Person_id, Name
  2  from Pa_projects_all a, Pa_project_players b
  3  where a.person_id = b.person_id
  4  and a.project_id = 1001;
如果要将其放入任何工具中,则可以使用分析函数ROW_NUMBER,如下所示:

SELECT CASE WHEN RN = 1 THEN Project_Id END AS Project_Id, Person_id, Name FROM
(Select Project_Id, Person_id, Name,
       ROW_NUMBER() OVER (PARTITION BY Project_Id ORDER BY Person_id) AS RN
from Pa_projects_all a, Pa_project_players b
where a.person_id = b.person_id
and a.project_id = 1001)
ORDER BY RN;