oracle 如何使用Pivot将行转换为列?

vptzau2j  于 2023-11-17  发布在  Oracle
关注(0)|答案(1)|浏览(116)

我在tableA中有数据,可以有多行用于我们的客户。每行都有发票购买的代码。我想为每个客户返回一行,每个发票类型的列等于'100'和'18'。下图显示了表如何返回结果,底部是我想返回的。
enter image description here
我使用此链接作为指导:https://www.youtube.com/watch?v=bNetxDl40pM&ab_channel=Teradata
这就是我的:

select * from mytable1 pivot (max(client) FOR Invoice IN (18, 100) TEST ORDER BY 1

字符串
我运行了查询,但它没有返回我所期望的。

fquxozlt

fquxozlt1#

您希望透视多个列,因此需要在透视表中包含多个列:

SELECT *
FROM   mytable1
PIVOT (
  MAX(descr) AS descr,
  MAX(amount) AS amount,
  MAX(date_paid) AS date_paid
  FOR Invoice IN (
    18  AS INV18,
    100 AS INV100
  )
)
ORDER BY client

字符串
其中,对于样本数据:

CREATE TABLE mytable1 (client, invoice, descr, amount, date_paid) AS
SELECT 123456, 100, 'car',   600, DATE '2020-01-23' FROM DUAL UNION ALL
SELECT 123456,  18, 'truck', 800, DATE '2020-01-29' FROM DUAL UNION ALL
SELECT 123456,   1, 'toy',   500, DATE '2020-01-05' FROM DUAL;


产出:
| 客户端|INV18_DESCR| INV 18_数量|INV18_DATE_PAID| INV100_DESCR| INV 100_数量|INV100_DATE_PAID|
| --|--|--|--|--|--|--|
| 123456 |卡车| 800 |2020-01-29 00:00:00|车| 600 |2020-01-23 00:00:00|
fiddle

相关问题