从表中选择“关系”作为列

时间:2014-01-23 21:10:49

标签: sql select multiple-columns

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

EX Org | Phone1 |电话2 |电话3

我一直在寻找数据透视表选择和类似的东西,但我只看到有关如何在同一个表中选择它而不是多个表的信息。

我想在一行中选择它,这样我就可以获得我正在处理的自定义Excel工作表的干净数据。

2 个答案:

答案 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。 首先,编写一个查询,获取电话号码和组织的每个唯一组合。 其次,将活动单元格设置为要启动的位置。 然后遍历该记录集,并为每个组织重复,并将单元格值设置为组织名称。 接下来,使用该组织对每个电话号码进行迭代和,将活动单元格向右移动,并使单元格值等于电话号码。 重复,直到到达组织实例的计数,然后再移回第一个单元格并向下移动一行。 为第一列中没有的每个组织执行此操作。