Sql 从表中选择关系作为列

Sql 从表中选择关系作为列,sql,select,multiple-columns,Sql,Select,Multiple Columns,我有一个包含组织信息的组织表和一个存储该组织内联系人的表。我想创建一个查询,该查询将在列中选择一个组织以及与其联系人关联的所有电话号码 EX组织|电话1 |电话2 |电话3 我一直在关注pivot表选择和类似的东西,但我只看到了如何在同一个表中选择它的信息,而不是多个表 我想在一行中选择所有数据,以便为我正在处理的自定义excel工作表提供干净的数据。我认为在大型表上执行取消PIVOT的最有效方法(如果您的数据库不支持取消PIVOT)是: (注意:在某些数据库中,n子查询可能需要dual中的。)

我有一个包含组织信息的组织表和一个存储该组织内联系人的表。我想创建一个查询,该查询将在列中选择一个组织以及与其联系人关联的所有电话号码

EX组织|电话1 |电话2 |电话3

我一直在关注pivot表选择和类似的东西,但我只看到了如何在同一个表中选择它的信息,而不是多个表


我想在一行中选择所有数据,以便为我正在处理的自定义excel工作表提供干净的数据。

我认为在大型表上执行取消PIVOT的最有效方法(如果您的数据库不支持取消PIVOT)是:

(注意:在某些数据库中,
n
子查询可能需要dual中的
。)

您也可以将其作为一个
联合所有

select org, phone1 from orgs union all
select org, phone2 from orgs union all
select org, phone3 from orgs;

union-all
方法需要扫描表三次,而第一种方法通常只扫描数据表一次。

我认为以您想要的方式进行布局的唯一方法似乎有些过分,但下面是一些伪代码:

你必须写一些VBA。 首先,编写一个查询,获取电话号码和组织的每个唯一组合。 其次,设置要开始的活动单元格。 然后对每个组织迭代该记录集和,并将单元格值设置为组织名称。 接下来,使用该组织对每个电话号码进行迭代和,将活动单元格向右移动,使单元格值等于电话号码。 重复此操作,直到达到组织实例的计数,然后返回到第一个单元格并向下移动一行。 对不是第一列的每个组织都这样做

select org, phone1 from orgs union all
select org, phone2 from orgs union all
select org, phone3 from orgs;