Что вам больше не нравится в существующем запросе? Если вы обеспокоены тем, что DISTINCT
по двум столбцам не возвращается только уникальная перестановка, почему бы не попробовать?
Это, безусловно, работает, как и следовало ожидать в Oracle.
SQL> select distinct deptno, job from emp
2 order by deptno, job
3 /
DEPTNO JOB
---------- ---------
10 CLERK
10 MANAGER
10 PRESIDENT
20 ANALYST
20 CLERK
20 MANAGER
30 CLERK
30 MANAGER
30 SALESMAN
9 rows selected.
SQL> select count(*) from (
2 select distinct deptno, job from emp
3 )
4 /
COUNT(*)
----------
9
SQL>
редактировать
Я пошел в тупик с аналитикой, но ответ был удручающе очевиден ...
SQL> select count(distinct concat(deptno,job)) from emp
2 /
COUNT(DISTINCTCONCAT(DEPTNO,JOB))
---------------------------------
9
SQL>
редактировать 2
С учетом следующих данных приведенное выше объединенное решение будет неверно учтено:
col1 col2
---- ----
A AA
AA A
Поэтому мы должны включить разделитель ...
select col1 + '*' + col2 from t23
/
Очевидно, что выбранный разделитель должен быть символом или набором символов, которые никогда не могут появляться ни в одном столбце.