我有一个组织表,其中包含有关组织的信息,以及一个存储该组织内联系人的表。我想创建一个查询,它将选择一个组织以及与列中联系人关联的所有电话号码。
EX Org | Phone1 |电话2 |电话3
我一直在寻找数据透视表选择和类似的东西,但我只看到有关如何在同一个表中选择它而不是多个表的信息。
我想在一行中选择它,这样我就可以获得我正在处理的自定义Excel工作表的干净数据。
答案 0 :(得分:0)
我认为在大型表上执行unpivot的最佳表现方式(如果您的数据库不支持unpivot
)是:
select org,
(case when n.n = 1 then phone1
when n.n = 2 then phone2
when n.n = 3 then phone3
end) as phone
from orgs o cross join
(select 1 as n union all select 2 union all select 3
) n;
(注意:在某些数据库中,from dual
子查询可能需要n
。)
您也可以union all
:
select org, phone1 from orgs union all
select org, phone2 from orgs union all
select org, phone3 from orgs;
union all
方法需要扫描表三次,而第一种方法通常只扫描数据表一次。
答案 1 :(得分:0)
我能想到以你想要的方式进行布局的唯一方法似乎是矫枉过正,但这里有一些伪代码:
你将不得不写一些VBA。 首先,编写一个查询,获取电话号码和组织的每个唯一组合。 其次,将活动单元格设置为要启动的位置。 然后遍历该记录集,并为每个组织重复,并将单元格值设置为组织名称。 接下来,使用该组织对每个电话号码进行迭代和,将活动单元格向右移动,并使单元格值等于电话号码。 重复,直到到达组织实例的计数,然后再移回第一个单元格并向下移动一行。 为第一列中没有的每个组织执行此操作。