Oracle中的多表透视

46qrfjad  于 2023-01-25  发布在  Oracle
关注(0)|答案(1)|浏览(201)

我有以下三个表
表1制造商标签
| 身份证|顺序|制造商|
| - ------|- ------|- ------|
| 1234|1个|古格|
| 1234|第二章|苹果|
表2图标签
| 身份证|顺序|旗|
| - ------|- ------|- ------|
| 1234|1个|释放|
| 1234|第二章|拒绝|
表3生产编号标签
| 身份证|顺序|伪随机数|
| - ------|- ------|- ------|
| 1234|1个|普XYZ|
| 1234|第二章|PABC公司|
我想在以下格式的数据
| 身份证|制造商1|制造商2|旗标1|旗标2|pn1|pn2|
| - ------|- ------|- ------|- ------|- ------|- ------|- ------|
| 1234|古格|苹果|释放|拒绝|普XYZ|PABC公司|
我也会有另一种情况下,所有有列是在一个表如下。如何获得相似的结果,从下表。
| 身份证|顺序|制造商|旗|伪随机数|
| - ------|- ------|- ------|- ------|- ------|
| 1234|1个|古格|释放|普XYZ|
| 1234|第二章|苹果|拒绝|PABC公司|
谢谢
我可以逐个透视表,但找不到透视多个表的方法。谢谢

h7wcgrx3

h7wcgrx31#

一种常用的透视方法是条件聚合:

select
  id,
  max(case when seq = 1 then t1.mfr end) as mfr1,
  max(case when seq = 2 then t1.mfr end) as mfr2,
  max(case when seq = 1 then t2.flag end) as flag1,
  max(case when seq = 2 then t2.flag end) as flag2,
  max(case when seq = 1 then t3.pn end) as pn1,
  max(case when seq = 2 then t3.pn end) as pn2
from t1
join t2 using (id, seq)
join t3 using (id, seq)
group by id
order by id;

相关问题