Qu'est-ce que vous n'aimez pas dans votre requête existante? Si vous craignez que DISTINCT
sur deux colonnes ne renvoie pas uniquement les permutations uniques, pourquoi ne pas l'essayer?
Cela fonctionne certainement comme vous pouvez vous y attendre dans 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>
Éditer
Je suis descendu dans une ruelle aveugle avec des analyses mais la réponse était d'une évidence déprimante ...
SQL> select count(distinct concat(deptno,job)) from emp
2 /
COUNT(DISTINCTCONCAT(DEPTNO,JOB))
---------------------------------
9
SQL>
modifier 2
Compte tenu des données suivantes, la solution de concaténation fournie ci-dessus sera incorrecte:
col1 col2
---- ----
A AA
AA A
Nous devons donc inclure un séparateur ...
select col1 + '*' + col2 from t23
/
Évidemment, le séparateur choisi doit être un caractère, ou un ensemble de caractères, qui ne peut jamais apparaître dans aucune des colonnes.