bonjour à toutes et tous,

je me retrouve coincé sur une query que j'arrive pas a résoudre.
Voici le contexte:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 - create table TMP_PRD_TEST
(
  param_name VARCHAR2(40) not null,
  mag        VARCHAR2(40) not null,
  prd        VARCHAR2(40) not null,
  refe       VARCHAR2(40) not null,
  ht         FLOAT(38),
  ttc        FLOAT(38)
);
 
alter table TMP_PRD_TEST
  add constraint TMP_PRD_TEST_PK primary key (PARAM_NAME, MAG, PRD, REFE)
  using index;
et voici pour les données de la table

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 insert into TMP_PRD_TEST (param_name, mag, prd, refe, ht, ttc)
values ('TITI', 'DEFAULT', 'DEFAULT', 'DEFAULT', 10, null);
insert into TMP_PRD_TEST (param_name, mag, prd, refe, ht, ttc)
values ('TITI', 'CARROUF', 'DEFAULT', 'DEFAULT', null, 14);
insert into TMP_PRD_TEST (param_name, mag, prd, refe, ht, ttc)
values ('TITI', 'DEFAULT', 'DEFAULT', 'ABC12ABC', 12, null);

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
select t.*, t.rowid from TMP_PRD_TEST t
where param_name = 'TITI'
and (mag like 'CARROUF' or mag = 'DEFAULT')
and (prd like 'HARICOTS' OR PRD ='DEFAULT')
and (refe like '%14%' or refe = 'DEFAULT')
je voudrais que si le mag match alors il prend le mag sinon il prend la valeur DEFAULT de même pour le produit et la ref.

dans mon test je devrais avoir uniquement la ligne 2

dans le test suivant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
select t.*, t.rowid from TMP_PRD_TEST t
where param_name = 'TITI'
and (mag like 'CARROUF' or mag = 'DEFAULT')
and (prd like 'HARICOTS' OR PRD ='DEFAULT')
and (refe like '%12%' or refe = 'DEFAULT')
j'aimerai avoir que la ligne 3 la colonne la plus a droite ayant une plus forte priorité que ces précédentes.


Voila si quelqu'un a une astuce pour moi elle est la bienvenue....

Hésitez pas si vous avez besoin d'information...

N.