我的数据库中有一个名为customers的表,其中有零售商(客户) 和typeid分开的分销商(例如:typeid = 1客户和typeid = 2分销商)
现在有一个映射表,其中有客户和分销商的映射。 请注意,零售商或客户最多只有两个分销商。
下面是Mapping表。
| Customer | Distributor |
----------------------------
| Customer1 | Distributor1 |
| Customer1 | Distributor2 |
| Customer2 | Distributor1 |
| Customer2 | Distributor3 |
| Customer3 | Distributor2 |
我想将此表格表示如下
| Customer | Partner1 | Partner 2 |
---------------------------------------------------
| Customer1 | Distributor1 | Distributor2 |
| Customer2 | Distributor1 | Distributor3 |
| Customer3 | Distributor2 | Null |
Pivot的概念让我印象深刻,但是没有列可以对要应用的数据枢轴执行聚合函数。
获得理想结果的简单方法是什么?
PS:我已经想过从两个临时表中获取两个不同的集合然后加入它们,但这看起来很乏味。如果有人可以通过更简单的解决方案指出我的结果,请帮助我。
答案 0 :(得分:2)
您可以使用row_number()
:
select customer,
max(case when seqnum = 1 then distributor end) as distributor1,
max(case when seqnum = 2 then distributor end) as distributor2
from (select t.*,
row_number() over (partition by customer order by (select null)) as seqnum
from t
) t
group by customer;