我有一个表,它具有以下结构和示例数据:
| 供货商|订单|交货日期|备注|用户|
| - ------|- ------|- ------|- ------|- ------|
| 佩西|小行星|二十二年十二月二十日|开放|约翰|
| 佩西|小行星|二十二年十二月二十二日|要求|马丁|
| 佩西|小行星|二十二年十二月二十六日|过程中|怀亚特|
| 佩西|小行星|2023年1月10日|延迟|哈比|
| 佩西|小行星|2023年1月22日|运输途中|卡伦|
表可以包含不同的供应商和订单。我需要在一行中显示每个订单和供应商的数据。如下所示:
| 供货商|订单|交付日期1|备注_1|用户_1|交付日期2|备注_2|用户_2|交货日期3|备注_3|用户_3|
| - ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|- ------|
| 佩西|小行星|二十二年十二月二十日|开放|约翰|二十二年十二月二十二日|要求|马丁|二十二年十二月二十六日|过程中|怀亚特|
等等
我尝试过PIVOT,但它不起作用:
SELECT VENDOR,
order_number,
-- delivery_date,
pickup_date
reasonf_of_delay,
user_name
from table
PIVOT
(count(delivery_date)
FOR order_number
)
4条答案
按热度按时间gmxoilav1#
您可以使用以下代码构建类似的内容:
问题是PIVOT列在这种方式下是静态的,所以,您可以添加10或20(在您的情况下是最多的),如果这样的记录不存在,则具有NULL值。
zy1mlcev2#
最简单的方法是像开始时那样使用***PIVOT子句***。但是,您需要添加与列一样多的聚合度量(交付日期、备注、用户编号)。此外,您还需要对(row_number)每个VENDOR、ORDER#的所有行,然后使用PIVOT子句,如下所示。您可以***更改PIVOT子句为上部SELECT中的列生成的别名***。
demo on db<>fiddle
7kjnsjlb3#
请阅读透视的文档。例如:https://oracle-base.com/articles/11g/pivot-and-unpivot-operators-11gr1
如果你想透视你必须知道哪些值返回给一行中的一列,你将有不同的列。使用普通SQL而不是动态SQL,你不能有一个不确定的列数。我真的不明白你的SQL必须返回哪些列。
to94eoyn4#
)t其中订单= 1122按供应商分组
!不确定你的用例,但这可能会起作用。如果你有很多数据,我会建议创建一个新表,并通过转换插入。