3 votes

Récupérer les lignes qui remplissent au moins quatre des sept conditions données.

J'ai une table appelée "Alphabets" avec des colonnes nommées de "A à G".

Table Name: Alphabets

Column Names: A | B | C | D | E | F | G  

J'ai maintenant besoin d'une requête SQL pour récupérer toutes les lignes de la table qui répondent à au moins quatre critères de la liste suivante :

A = 1   
B = 2  
C = 3  
D = 4  
E = 5  
F = 6
G = 7

J'utilise la base de données Oracle 10g.

8voto

Damien_The_Unbeliever Points 102139
SELECT * FROM Alphabets where
CASE WHEN A=1 THEN 1 ELSE 0 END +
CASE WHEN B=2 THEN 1 ELSE 0 END +
CASE WHEN C=3 THEN 1 ELSE 0 END +
CASE WHEN D=4 THEN 1 ELSE 0 END +
CASE WHEN E=5 THEN 1 ELSE 0 END +
CASE WHEN F=6 THEN 1 ELSE 0 END +
CASE WHEN G=7 THEN 1 ELSE 0 END >= 4

Mais quelque chose dans ce tableau et cette requête semble suspect. On a l'impression qu'il devrait s'agir d'un tableau à deux colonnes, Letter y Value dire.

5voto

ppeterka Points 12141

Une solution moche à laquelle j'ai pensé (je suis sûr qu'il doit y avoir de meilleures solutions, mais celle-ci devrait fonctionner, bien que je ne sois pas convaincu qu'elle soit optimale dans un sens ou dans l'autre...)

SELECT * 
FROM Alphabets
WHERE
CASE WHEN A=1 THEN 1 ELSE 0 END + 
CASE WHEN B=2 THEN 1 ELSE 0 END + 
CASE WHEN C=3 THEN 1 ELSE 0 END + 
CASE WHEN D=4 THEN 1 ELSE 0 END + 
CASE WHEN E=5 THEN 1 ELSE 0 END + 
CASE WHEN F=6 THEN 1 ELSE 0 END + 
CASE WHEN G=7 THEN 1 ELSE 0 END BETWEEN 4 AND 7

Cela pose des problèmes :

  • ne s'adapte pas bien - nouvelle contrainte - nouvelle ligne dans la requête...
  • Du point de vue des performances, il n'est pas optimal
  • et aussi tout simplement horriblement laid

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X