add batch remove batch split batch comment selection show hidden batches hide batch highlight batch
db<>fiddle
donate feedback about
By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
CREATE TABLE "Order" (
"id" NUMBER(10) PRIMARY KEY,
"order_number" VARCHAR2(255),
"external_id" NUMBER(10),
"version" NUMBER(10),
"description" VARCHAR2(255),
"create_ts" TIMESTAMP
);
CREATE TABLE "Partner" (
"id" NUMBER(10) PRIMARY KEY,
"order_id" NUMBER(10),
"partner_code" VARCHAR2(255),
"partner_name" VARCHAR2(255),
"identifier" VARCHAR2(255),
"type" VARCHAR2(255),
"value" NUMBER(10),
FOREIGN KEY ("order_id") REFERENCES "Order"("id")
);
CREATE TABLE "Fees" (
"id" NUMBER PRIMARY KEY,
"order_id" NUMBER,
"identifier" VARCHAR2(255),
"type" VARCHAR2(255),
"value" NUMBER,
FOREIGN KEY ("order_id") REFERENCES "Order"("id")
);
CREATE TABLE "order_attributes" (
"id" NUMBER PRIMARY KEY,
"order_number" VARCHAR2(255),
"external_id" NUMBER,
"partner_code" VARCHAR2(255),
"identifier" VARCHAR2(255),
"type" VARCHAR2(255),
"value" NUMBER
);
INSERT INTO "Order" ("id", "order_number", "external_id", "version", "description", "create_ts")
VALUES
(1, 'ORD001', 1001, 1, 'External id 1', TIMESTAMP '2024-05-05 10:00:00'),
(2, 'ORD001', 1002, 1, 'External Id 2', TIMESTAMP '2024-05-05 10:00:00'),
(3, 'ORD001', 1001, 2, 'External id 1', TIMESTAMP '2024-05-05 11:00:00'),
(4, 'ORD001', 1002, 2, 'External Id 2', TIMESTAMP '2024-05-05 11:00:00'),
(5, 'ORD001', 1001, 3, 'External id 1', TIMESTAMP '2024-05-05 12:00:00'),
(6, 'ORD001', 1002, 3, 'External Id 2', TIMESTAMP '2024-05-05 12:00:00');

6 rows affected
-- Sample data for Partner table
INSERT INTO "Partner" ("id", "order_id", "partner_code", "partner_name", "identifier", "type", "value")
VALUES
-- For identifier = INTERNAL
(1, 5, 'P001', 'Partner 1', 'INTERNAL', 'A', 150),
(2, 5, 'P001', 'Partner 1', 'INTERNAL', 'B', 170),
(3, 5, 'P001', 'Partner 1', 'INTERNAL', 'C', 101),
(4, 5, 'P001', 'Partner 1', 'INTERNAL', 'D', 105),
(5, 5, 'P001', 'Partner 1', 'INTERNAL', 'E', 155),
-- For identifier = EXTERNAL
(6, 5, 'P001', 'Partner 1', 'EXTERNAL', 'A', 1600),
(7, 5, 'P001', 'Partner 1', 'EXTERNAL', 'B', 1800),
(8, 5, 'P001', 'Partner 1', 'EXTERNAL', 'C', 1100),
(9, 5, 'P001', 'Partner 1', 'EXTERNAL', 'D', 1350),
(10, 5, 'P001', 'Partner 1', 'EXTERNAL', 'E', 1600),
-- For identifier = LOCAL
(11, 5, 'P001', 'Partner 1', 'LOCAL', 'A', 17000),
(12, 5, 'P001', 'Partner 1', 'LOCAL', 'B', 19000),
(13, 5, 'P001', 'Partner 1', 'LOCAL', 'C', 12000),
(14, 5, 'P001', 'Partner 1', 'LOCAL', 'D', 14500),
(15, 5, 'P001', 'Partner 1', 'LOCAL', 'E', 17000),

(16, 6, 'P002', 'Partner 2', 'INTERNAL', 'A', 250),
(17, 6, 'P002', 'Partner 2', 'INTERNAL', 'B', 207),
(18, 6, 'P002', 'Partner 2', 'INTERNAL', 'C', 201),
(19, 6, 'P002', 'Partner 2', 'INTERNAL', 'D', 205),
(20, 6, 'P002', 'Partner 2', 'INTERNAL', 'E', 205),
-- For identifier = EXTERNAL
(21, 6, 'P002', 'Partner 2', 'EXTERNAL', 'A', 2600),
(22, 6, 'P002', 'Partner 2', 'EXTERNAL', 'B', 2800),
(23, 6, 'P002', 'Partner 2', 'EXTERNAL', 'C', 2100),
(24, 6, 'P002', 'Partner 2', 'EXTERNAL', 'D', 2350),
(25, 6, 'P002', 'Partner 2', 'EXTERNAL', 'E', 2600),
-- For identifier = LOCAL
(26, 6, 'P002', 'Partner 2', 'LOCAL', 'A', 27000),
(27, 6, 'P002', 'Partner 2', 'LOCAL', 'B', 29000),
30 rows affected
INSERT INTO "Fees" ("id", "order_id", "identifier", "type", "value")
VALUES
-- For identifier = EXPENSE
(1, 5, 'EXPENSE', 'F1', 50),
(2, 5, 'EXPENSE', 'F2', 75),
(3, 5, 'EXPENSE', 'F3', 10),
(4, 5, 'EXPENSE', 'F4', 12),
-- Fr identifier = BILLED
(5, 5, 'BILLED', 'F1', 60),
(6, 5, 'BILLED', 'F2', 80),
(7, 5, 'BILLED', 'F3', 11),
(8, 5, 'BILLED', 'F4', 13),
-- For identifier = SETTLED
(9, 5, 'SETTLED', 'F1', 70),
(10, 5, 'SETTLED', 'F2', 90),
(11, 5, 'SETTLED', 'F3', 17),
(12, 5, 'SETTLED', 'F4', 14),
(21, 6, 'EXPENSE', 'F1', 850),
(22, 6, 'EXPENSE', 'F2', 875),
(23, 6, 'EXPENSE', 'F3', 810),
(24, 6, 'EXPENSE', 'F4', 812),
-- Fr identifier = BILLED
(25, 6, 'BILLED', 'F1', 860),
(26, 6, 'BILLED', 'F2', 880),
(27, 6, 'BILLED', 'F3', 811),
(28, 6, 'BILLED', 'F4', 813),
-- For identifier = SETTLED
(29, 6, 'SETTLED', 'F1', 870),
(30, 6, 'SETTLED', 'F2', 880),
(31, 6, 'SETTLED', 'F3', 817),
(32, 6, 'SETTLED', 'F4', 814)
24 rows affected
-- Sample data for "order_attributes" table
INSERT INTO "order_attributes" ("id", "order_number", "external_id", "partner_code", "identifier", "type", "value")
VALUES
('1', 'ORD001', '1001', 'P001', 'CALCULATED', 'X', 123),
('2', 'ORD001', '1001', 'P001', 'CALCULATED', 'Y', 234),
('3', 'ORD001', '1001', 'P001', 'CALCULATED', 'Z', 23432),
('4', 'ORD001', '1001', 'P001', 'EDITED', 'X', 4665),
('5', 'ORD001', '1001', 'P001', 'EDITED', 'Y', 4557),
('6', 'ORD001', '1001', 'P001', 'EDITED', 'Z', 567567),
('7', 'ORD001', '1002', 'P001', 'CALCULATED', 'X', 3423),
('8', 'ORD001', '1002', 'P001', 'CALCULATED', 'Y', 434),
('9', 'ORD001', '1002', 'P001', 'CALCULATED', 'Z', 9897),
('10', 'ORD001', '1002', 'P001', 'EDITED', 'X', 6767),
('11', 'ORD001', '1002', 'P001', 'EDITED', 'Y', 678),
('12', 'ORD001', '1002', 'P001', 'EDITED', 'Z', 7887)

12 rows affected
SELECT
"o"."order_number",
"o"."external_id",
"p"."partner_code",
"o"."version",
MAX("p"."partner_name") as "partner_name",
MAX("o"."create_ts") AS "create_ts",
MAX("o"."description") as "description",
MAX(NVL(CASE WHEN "a"."identifier"='CALCULATED' AND "a"."type"='X' THEN "a"."value" END,
(CASE WHEN "p"."identifier"='INTERNAL' AND "p"."type"='A' THEN "p"."value" END))) AS "value_a",
MAX(NVL(CASE WHEN "a"."identifier"='EDITED' AND "a"."type"='X' THEN "a"."value" END,
(CASE WHEN "p"."identifier"='INTERNAL' AND "p"."type"='B' THEN "p"."value" END))) AS "value_b"
FROM
"Order" "o"
LEFT JOIN
"Partner" "p" ON "o"."id" = "p"."order_id"
LEFT JOIN
"Fees" "f" ON "o"."id" = "f"."order_id"
LEFT JOIN
"order_attributes" "a" ON "o"."order_number" = "a"."order_number"
AND "o"."external_id" = "a"."external_id"
AND "p"."partner_code" = "a"."partner_code"
WHERE
("o"."order_number", "o"."external_id", "o"."version", "o"."create_ts") in (
SELECT "o1"."order_number", "o1"."external_id", MAX("o1"."version"), MAX("o1"."create_ts")
FROM "Order" "o1"
GROUP BY "o1"."order_number", "o1"."external_id")
and "o"."order_number"='ORD001'
GROUP BY
"o"."order_number", "o"."external_id", "o"."version", "p"."partner_code";

order_number external_id partner_code version partner_name create_ts description value_a value_b
ORD001 1001 P001 3 Partner 1 05-MAY-24 12.00.00.000000 External id 1 150 4665
ORD001 1002 P002 3 Partner 2 05-MAY-24 12.00.00.000000 External Id 2 250 207