WITH
tab1 AS
( SELECT TO_DATE('16.02.2021', 'DD.MM.YYYY') AS date_col, 'G1' AS group_col, 1000 AS tenant, 'SG1' AS subgroup FROM DUAL
UNION ALL
SELECT TO_DATE('16.02.2021', 'DD.MM.YYYY') AS date_col, 'G1' AS group_col, 2000 AS tenant, 'SG2' AS subgroup FROM DUAL
UNION ALL
SELECT TO_DATE('16.02.2021', 'DD.MM.YYYY') AS date_col, 'G1' AS group_col, 3000 AS tenant, 'SG3' AS subgroup FROM DUAL
UNION ALL
SELECT TO_DATE('17.02.2021', 'DD.MM.YYYY') AS date_col, 'G2' AS group_col, 1000 AS tenant, 'SG4' AS subgroup FROM DUAL
UNION ALL
SELECT TO_DATE('17.02.2021', 'DD.MM.YYYY') AS date_col, 'G2' AS group_col, 2000 AS tenant, 'SG5' AS subgroup FROM DUAL
UNION ALL
SELECT TO_DATE('18.02.2021', 'DD.MM.YYYY') AS date_col, 'G3' AS group_col, 2000 AS tenant, 'SG6' AS subgroup FROM DUAL
UNION ALL
SELECT TO_DATE('18.02.2021', 'DD.MM.YYYY') AS date_col, 'G3' AS group_col, 3000 AS tenant, 'SG7' AS subgroup FROM DUAL
UNION ALL
SELECT TO_DATE('19.02.2021', 'DD.MM.YYYY') AS date_col, 'G4' AS group_col, 1000 AS tenant, 'SG8' AS subgroup FROM DUAL
),
tab2 AS
( SELECT 1000 AS tenant FROM DUAL
UNION ALL
SELECT 2000 AS tenant FROM DUAL
UNION ALL
SELECT 3000 AS tenant FROM DUAL
)
SELECT *
FROM ( SELECT t1.group_col,
t2.tenant
FROM ( SELECT DISTINCT group_col FROM tab1) t1
CROSS JOIN tab2 t2
) x
WHERE NOT EXISTS ( SELECT *
FROM tab1
WHERE tab1.group_col = x.group_col
AND tab1.tenant = x.tenant
)
ORDER BY group_col,
tenant;
结果:
GR TENANT
-- ----------
G2 3000
G3 1000
G4 2000
G4 3000
查询也可以在 Postgres 中使用(然后删除 FROM DUAL 否则您会将其调整到您的表中)。