Bonjour à tous,
Je cherche à écrire une procédure stockée qui, en fonction du paramètre ne va pas restreindre selon le même nombre de champs.
Si le paramètre vaut 1,
Si le paramètre vaut 2 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 WHERE ISNUMERIC(Q1) = 1 AND ISNUMERIC(Q2) = 1 AND ISNUMERIC(Q3) = 1 AND ISNUMERIC(Q4) = 1 AND ISNUMERIC(Q5) = 1 AND ISNUMERIC(Q6) = 1
le tout est utilisé dans un UNPIVOT de la manière suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 WHERE ISNUMERIC(Q1) = 1 AND ISNUMERIC(Q2) = 1 AND ISNUMERIC(Q3) = 1 AND ISNUMERIC(Q4) = 1 AND ISNUMERIC(Q5) = 1 AND ISNUMERIC(Q6) = 1 AND ISNUMERIC(Q7) = 1 AND ISNUMERIC(Q8) = 1
C'est en fonction de ce paramètre @NumTypeQuestion que je veux récupérer les question 1 à 6 ou 1 à 14.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 SELECT ....... , quest.NUM_QUESTION AS NumQuestion , quest.LIB_QUESTION AS LibQuestion , NoteEval FROM dbo.T_NRM_INSCRIPTIONS ins ..... JOIN (SELECT eval.N_INSCRIPTION, eval.EVAL_CODE_STAGE, eval.EVAL_CODE_SESSION , N_TYPE_QUEST , Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, Q10, Q11, Q12, Q13, Q14 FROM Prn_Dwh_Acc.dbo.T_ACC_T_EVALUATIONS eval WHERE ISNUMERIC(Q1) = 1 AND ISNUMERIC(Q2) = 1 AND ISNUMERIC(Q3) = 1 AND ISNUMERIC(Q4) = 1 AND ISNUMERIC(Q5) = 1 AND ISNUMERIC(Q6) = 1 AND N_TYPE_QUEST = @NumTypeQuestion) p UNPIVOT (NoteEval FOR Question IN (Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, Q10, Q11, Q12, Q13, Q14)) AS unpvt ON unpvt.N_INSCRIPTION = ins.Inscription_Id JOIN Prn_Dwh_Acc.dbo.T_ACC_T_QUESTIONS quest ON quest.N_TYPE_QUEST = unpvt.N_TYPE_QUEST WHERE 'Q' + cast(quest.NUM_QUESTION AS VARCHAR(4))= Question .......
Si je ne trouve pas je pensais faire une fonction en amont avec IF tout bête et qui appelle ensuite 2 PS différentes, mais je ne trouve aps ça très propre.
Merci à vous.
Partager