Sql 不一致转置

Sql 不一致转置,sql,oracle,Sql,Oracle,给定一个表a包含以下数据: +----------+-------+ | Supplier | buyer | +----------+-------+ | A | 1 | | A | 2 | | B | 3 | | B | 4 | | B | 5 | +----------+-------+ +----------+-------+ |供应商|买方| +----------+-----

给定一个表
a
包含以下数据:

+----------+-------+ | Supplier | buyer | +----------+-------+ | A | 1 | | A | 2 | | B | 3 | | B | 4 | | B | 5 | +----------+-------+ +----------+-------+ |供应商|买方| +----------+-------+ |A | 1| |A | 2| |B | 3| |B | 4| |B | 5| +----------+-------+ 我的问题是,我可以转置第二列,使结果表如下所示:

+----------+--------+--------+--------+ | Supplier | buyer1 | buyer2 | buyer3 | +----------+--------+--------+--------+ | A | 1 | 2 | | | B | 3 | 4 | 5 | +----------+--------+--------+--------+ +----------+--------+--------+--------+ |供应商|买方1 |买方2 |买方3| +----------+--------+--------+--------+ |A | 1 | 2 || |B | 3 | 4 | 5| +----------+--------+--------+--------+
假设最大买家数量为三个。

您可以使用一个通用的表表达式在供应商中为每个买家下订单,然后只需按常规案例将其放入列中

WITH cte AS (
  SELECT supplier, buyer, 
    ROW_NUMBER() OVER (PARTITION BY supplier ORDER BY buyer) rn
  FROM Table1
)
SELECT supplier, 
       MAX(CASE WHEN rn=1 THEN buyer END) buyer1,
       MAX(CASE WHEN rn=2 THEN buyer END) buyer2,
       MAX(CASE WHEN rn=3 THEN buyer END) buyer3
FROM cte
GROUP BY supplier;

.

您可以使用一个通用的表表达式在供应商中为每个买家下一个订单,然后只做一个常规的案例将它们放在列中

WITH cte AS (
  SELECT supplier, buyer, 
    ROW_NUMBER() OVER (PARTITION BY supplier ORDER BY buyer) rn
  FROM Table1
)
SELECT supplier, 
       MAX(CASE WHEN rn=1 THEN buyer END) buyer1,
       MAX(CASE WHEN rn=2 THEN buyer END) buyer2,
       MAX(CASE WHEN rn=3 THEN buyer END) buyer3
FROM cte
GROUP BY supplier;

< /P> < P>你可以考虑使用枢轴子句:

select *
from (
  select supplier, buyer, row_number() over (partition by supplier order by buyer) as seq
  from a
)
pivot (max(buyer) for seq in (1 as buyer1, 2 as buyer2, 3 as buyer3));

< /P> < P>你可以考虑使用枢轴子句:

select *
from (
  select supplier, buyer, row_number() over (partition by supplier order by buyer) as seq
  from a
)
pivot (max(buyer) for seq in (1 as buyer1, 2 as buyer2, 3 as buyer3));

.

谢谢,但我应该提到我正在使用oracle 10g。Pivot从11g开始提供。谢谢,但我应该提到我正在使用oracle 10g。Pivot从11g开始提供。