[Concours Sql Pro] un dans dix ( 3 étoiles ).

Article publié avec l’autorisation de l’auteur sql pro.

Cet article est une solution donnée à un problème de joe selko que j’avais résolu en janvier 2007.

Enoncé : ici

Si vous le souhaitez, vous pouvez vous rendre sur le site de Sql Pro, vous cherchez une solution de votre coté et vous regardez si votre résultat est différent de la solution que je propose.

1 ère question : les lignes de la table dont toutes les cellules f1 à f10 sont à zéro sauf une.

solution proposée :

SELECT TIO_ID FROM T_CELKO_TEN_IN_ON_TIO WHERE  
( CASE WHEN TIO_1=0 THEN 1 WHEN TIO_1<>0 THEN 0 END )  
+ ( CASE WHEN TIO_2=0 THEN 1 WHEN TIO_2<>0 THEN 0 END )  
+ ( CASE WHEN TIO_3=0 THEN 1 WHEN TIO_3<>0 THEN 0 END )  
+ (CASE WHEN TIO_4=0 THEN 1 WHEN TIO_4<>0 THEN 0 END )  
+ ( CASE WHEN TIO_5=0 THEN 1 WHEN TIO_5<>0 THEN 0 END )  
+ ( CASE WHEN TIO_6=0 THEN 1 WHEN TIO_6<>0 THEN 0 END )  
+ ( CASE WHEN TIO_7=0 THEN 1 WHEN TIO_7<>0 THEN 0 END )  
+ ( CASE WHEN TIO_8=0 THEN 1 WHEN TIO_8<>0 THEN 0 END )  
+ ( CASE WHEN TIO_9=0 THEN 1 WHEN TIO_9<>0 THEN 0 END )  
+ ( CASE WHEN TIO_10=0 THEN 1 WHEN TIO_10<>0 THEN 0 END ) = 9

j’ affecte un poids de 1 à une cellule nulle et j’ affiche l’ ensemble des lignes tel que 9 cases sont nulles.

2 ème question : les lignes de la table dont toutes les cellules f1 à f10 sont à zéro sauf une valuée à un.

solution proposée :

SELECT TIO_ID FROM T_CELKO_TEN_IN_ON_TIO  
WHERE ( CASE WHEN TIO_1=0 THEN 1 WHEN TIO_1>1 THEN 1 WHEN TIO_1=1 THEN 100 END )  
+ ( CASE WHEN TIO_2=0 THEN 1 WHEN TIO_2=1 THEN 100 END )  
+ ( CASE WHEN TIO_3=0 THEN 1 WHEN TIO_3=1 THEN 100 END )  
+ (CASE WHEN TIO_4=0 THEN 1 WHEN TIO_4=1 THEN 100 END )  
+ ( CASE WHEN TIO_5=0 THEN 1 WHEN TIO_5=1 THEN 100 END )  
+ ( CASE WHEN TIO_6=0 THEN 1 WHEN TIO_6=1 THEN 100 END )  
+ ( CASE WHEN TIO_7=0 THEN 1 WHEN TIO_7=1 THEN 100 END )  
+ ( CASE WHEN TIO_8=0 THEN 1 WHEN TIO_8=1 THEN 100 END )  
+ ( CASE WHEN TIO_9=0 THEN 1 WHEN TIO_9=1 THEN 100 END )  
+ ( CASE WHEN TIO_10=0 THEN 1 WHEN TIO_10=1 THEN 100 END ) = 109

j’ affecte un poids de 1 à une cellule nulle. j’ affecte également un poids de 100 si une cellule est égale à 1. Ainsi toute ligne composée de 9 éléments égale à 0 est sélectionnée si elle comporte également un élément à 1.

Une réflexion au sujet de « [Concours Sql Pro] un dans dix ( 3 étoiles ). »

Laisser un commentaire