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.
select version();
version()
8.0.26
WITH data0 (a, b, c, d, n) AS (
SELECT 1, 1, 0, 0, 50 UNION
SELECT 0, 0, 1, 0, 100 UNION
SELECT 0, 1, 1, 1, 200
)
, data1 (a, b, c, d, n, id) AS (
SELECT t.*, ROW_NUMBER() OVER (ORDER BY n) FROM data0 AS t
)
, data2 (event, n, id) AS (
SELECT 'A', n, id FROM data1 WHERE a = 1 UNION
SELECT 'B', n, id FROM data1 WHERE b = 1 UNION
SELECT 'C', n, id FROM data1 WHERE c = 1 UNION
SELECT 'D', n, id FROM data1 WHERE d = 1
)
, data (event, n, id, cnt) AS (
SELECT t.*, COUNT(*) OVER (PARTITION BY id) FROM data2 AS t
)
, tcross (event1, event2, n, id) AS (
SELECT t1.event, COALESCE(t2.event, t1.event), t1.n, t1.id
FROM data AS t1
LEFT JOIN data AS t2
ON t1.id = t2.id
AND t1.event < t2.event
WHERE t2.event IS NOT NULL OR t1.cnt = 1
)
SELECT event1, event2, n
FROM tcross
ORDER BY id, event1, event2
;
event1 event2 n
A B 50
C C 100
B C 200
B D 200
C D 200