Bonjour,
je dois trier les lignes d'une table PROG_PROD regroupés et triés selon différents critères:
- D'abord, les éléments dont le numéro de séquence est différent de 0, triés par N° de séquence, N° de programme et N° de produit
- Puis les éléments dont la numéro de séquence est égale à 0 et dont la priorité du programme est 1 ou 2. Ces éléments doivent être triés selon le N° de priorité, le N° de programme et le N° de produit
- Enfin les éléments dont le type est 'VKH'. Ces éléments doivent être triés selon le N° de programme et le N° de produit
Ma requête est présentée ci-dessous.
J'ai effectué 3 requêtes que j'ai associé avec la clause UNION.
Pour trier l'ensemble, j'ai affecté une valeur [ORDERED_GRP] à chaque requête et j'ai utilisé la clause Rank pour trier chaque jeu de résultat.
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 SELECT [ID],[TOOL],[N_PROG],[PROG_PRIO],[PROG_STATUS],[N_PRODUIT],[N_SEQU],[S_TYPE], 1 as ORDERED_GRP, rank() over (order by [N_SEQU], [N_PROG], [N_PRODUIT]) as rank FROM PROG_PROD WHERE [N_SEQU] <> 0 UNION SELECT [ID],[TOOL],[N_PROG],[PROG_PRIO],[PROG_STATUS],[N_PRODUIT],[N_SEQU],[S_TYPE], 2 as ORDERED_GRP, rank() over (order by [PROG_PRIO],[N_PROG],[N_PRODUIT]) as rank FROM PROG_PROD WHERE [N_SEQU] = 0 AND [PROG_PRIO] IN (1,2) UNION SELECT [ID],[TOOL],[N_PROG],[PROG_PRIO],[PROG_STATUS],[N_PRODUIT],[N_SEQU],[S_TYPE], 3 as ORDERED_GRP, rank() over (order by [N_PROG],[N_PRODUIT]) as rank FROM PROG_PROD WHERE [N_SEQU] = 0 AND [S_TYPE] = 'VKH' AND [PROG_PRIO] NOT IN (1,2)
Je ne suis pas sûr que la manière dont j'ai procédé soit la meilleure solution pour ce genre de requête.
Comment puis-je optimiser cette requête ?
Merci d'avance,
Etienne
Partager