Это должно сработать:
WITH color_size_rel AS (SELECT 1 color_size_id, 'Blue' color, 'L' "SIZE" FROM dual UNION ALL
SELECT 2 color_size_id, 'Blue' color, 'M' "SIZE" FROM dual UNION ALL
SELECT 3 color_size_id, 'Green' color, 'L' "SIZE" FROM dual UNION ALL
SELECT 4 color_size_id, 'Purple' color, 'L' "SIZE" FROM dual UNION ALL
SELECT 5 color_size_id, 'Pink' color, 'XL' "SIZE" FROM dual UNION ALL
SELECT 6 color_size_id, 'White' color, 'S' "SIZE" FROM dual UNION ALL
SELECT 6 color_size_id, 'Orange' color, 'S' "SIZE" FROM dual UNION ALL
SELECT 7 color_size_id, 'Blue' color, 'L' "SIZE" FROM dual)
SELECT "SIZE", color
FROM (SELECT DISTINCT "SIZE",
color,
COUNT(DISTINCT color) OVER (PARTITION BY "SIZE") cnt
FROM color_size_rel)
WHERE cnt > 1
ORDER BY "SIZE", color;
SIZE COLOR
---- ------
L Blue
L Green
L Purple
S Orange
S White
(я добавил дополнительный цвет в размере "S", чтобы продемонстрировать вывод, когда есть несколько размеров с более чем одним цветом.)
Это находит количество различных цветов на размер, а затем различает результирующий набор, так что, если в каждом размере есть дублирующие цвета, сообщается только один.Наконец, мы фильтруем результаты, чтобы показать те размеры, число которых больше 1.
NB. Пожалуйста, не используйте size
в качестве имени столбца - это зарезервированное слово, поэтому я должен былиспользуйте двойные кавычки каждый раз, когда я на него ссылаюсь.