我有一个表,它有以下 struct 和样本数据:

VENDOR ORDER DELIVERY_DATE REMARKS USER
PEPSI 1122 20-DEC-22 OPENED John
PEPSI 1122 22-DEC-22 REQUESTED Martin
PEPSI 1122 26-DEC-22 IN PROCESS Wyatt
PEPSI 1122 10-JAN-23 DELAYED Khabib
PEPSI 1122 22-JAN-23 IN TRANSIT Karen

表可以包含不同的供应商和订单.我需要在一行中显示每个订单和供应商的数据. 就像这样:

VENDOR ORDER DELIVERY_DATE_1 REMARKS_1 USER_1 DELIVERY_DATE_2 REMARKS_2 USER_2 DELIVERY_DATE_3 REMARKS_3 USER_3
PEPSI 1122 20-DEC-22 OPENED John 22-DEC-22 REQUESTED Martin 26-DEC-22 IN PROCESS Wyatt

我试过Pivot,但它不起作用:

SELECT VENDOR,
         order_number,
        -- delivery_date,
         pickup_date
         reasonf_of_delay,
         user_name
from table
PIVOT
(count(delivery_date)
 FOR order_number
 )

推荐答案

您可以使用以下代码构建类似的内容:

CREATE TABLE VENDOR_ORDERS (
    VENDOR VARCHAR2(50),
    ORDER_NUMBER NUMBER,
    DELIVERY_DATE DATE,
    REMARKS VARCHAR2(50),
    USER_NAME VARCHAR2(50)
);

INSERT INTO VENDOR_ORDERS VALUES ('PEPSI', 1122, TO_DATE('20-DEC-2022', 'DD-MON-YYYY'), 'OPENED', 'John');
INSERT INTO VENDOR_ORDERS VALUES ('PEPSI', 1122, TO_DATE('22-DEC-2022', 'DD-MON-YYYY'), 'REQUESTED', 'Martin');
INSERT INTO VENDOR_ORDERS VALUES ('PEPSI', 1122, TO_DATE('26-DEC-2022', 'DD-MON-YYYY'), 'IN PROCESS', 'Wyatt');
INSERT INTO VENDOR_ORDERS VALUES ('PEPSI', 1122, TO_DATE('10-JAN-2023', 'DD-MON-YYYY'), 'DELAYED', 'Khabib');
INSERT INTO VENDOR_ORDERS VALUES ('PEPSI', 1122, TO_DATE('22-JAN-2023', 'DD-MON-YYYY'), 'IN TRANSIT', 'Karen');

SELECT *
FROM
(
     SELECT VENDOR
           ,ORDER_NUMBER
           ,DELIVERY_DATE
           ,REMARKS
           ,USER_NAME
           ,ROW_NUMBER() OVER (PARTITION BY VENDOR, ORDER_NUMBER ORDER BY DELIVERY_DATE ASC) AS  rn
     FROM VENDOR_ORDERS vo
) DS
PIVOT
(
     MAX(DELIVERY_DATE) AS DT, MAX(REMARKS) AS R, MAX(USER_NAME) AS UN FOR RN IN ('1', '2', '3', '4', '5')
) PVT 

enter image description here

问题是,透视表列以这种方式是静态的.因此,如果不存在这样的记录,您可以添加最适合您的情况的10或20,并且值为NULL值.

Sql相关问答推荐

基于列对多行求和的查询

GROUP BY和GROUP_CONCAT用于计算比赛排名

在postgres中动态计算出现次数并插入到json中

Postgres,使用iLike运算符从json数组中搜索的工作方式与从常规表中搜索不同

Oracle SQL根据列中的条件 Select 最大记录数

SQL子查询返回多个值错误

在SQL查询中使用COALESS

对表进行多项 Select 以返回最大值和时间

属于(日期)范围类型及其交集的总权重​

如何用HeidiSQL在Firebird中设置超时?

提取连续时间戳范围的SQL

如何使用聚合连接两个表

如何优化仅返回符合条件的三条记录的查询?

MariaDB非常简单的MATCHAGAINST查询不使用FULLTEXT索引吗?

Postgres数据库维护:基于GROUP BY删除旧记录

如何将输出转换为二维格式?

如何在 ClickHouse SQL 中使用 CTE 将邻居语句中的数字作为偏移量传递?

使用日期和间隔作为键加入 Athena 上的表?

如何通过存储过程将 root 的下一个子 node 作为父 node ?

根据开始/结束标记将 GROUP_ID 分配给行