Précédent   Forum du club des développeurs et IT Pro > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 12/12/2012, 16h45   #1
h12enri
Candidat au titre de Membre du Club
 
Homme
Inscription : octobre 2012
Messages : 21
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : octobre 2012
Messages : 21
Points : 10
Points : 10
Par défaut Incrémenter des valeurs

Bonjour à tous,

Je ne suis pas convaincu que mon titre soit très évocateur mais je ne savais pas très bien quoi mettre. J'aurai besoin de l'expérience de l'un de vous

Alors voilà, en faisant touner une requête, j'ai ce résultat là:

WORDER --- ID ----- TYPE
1 ------ 280710 ----- 19
2 ------ 275435 ----- 13
3 ------ 276838 ----- 13
4 ------ 276870 ----- 13
5 ------ 276970 ----- 13
6 ------ 276983 ----- 13
7 ------ 276995 ----- 13
8 ------ 277014 ----- 13
9 ------ 277130 ----- 13
10 ----- 277350 ----- 13
11 ----- 277362 ----- 13
12 ----- 280711 ----- 19
13 ----- 277374 ----- 13
14 ----- 277386 ----- 13
15 ----- 277398 ----- 13
16 ----- 277450 ----- 13
17 ----- 277462 ----- 13
18 ----- 277710 ----- 13
19 ----- 277770 ----- 13
20 ----- 277805 ----- 13
21 ----- 277830 ----- 13
22 ----- 277842 ----- 13
23 ----- 280712 ----- 19
24 ----- 277854 ----- 13
25 ----- 278030 ----- 13
etc..........

La première colonne est un numéro d'ordre, la deuxième c'est l'ID de mes échantillons et la troisième est le type d'échantillon (13 ou 19)

En fait, le type 19 représente des blancs pour mes analyses.
Et, le type 13 ce sont mes échantillons à analyser.


Ce que j'aurai besoin de faire apparaître, c'est la position à laquelle vont se retrouver les blancs et les échantillons dans mon instrument.
Les blancs (type 19) sont soit à la position 1203 et 1204 et s'intercale tous les 10 échantillons.
Les échantillons (type 13) peuvent occuper 12 places sur mon rack et donc eux se trouvent au position 2101 à 2112, puis 2201 à 2212, puis 2301 à 2312, etc...


Concrètement, je dois avoir ce résultat là précisément:

WORDER --- ID ----- TYPE --- POSITION
1 ------ 280710 ----- 19 ----- 1203
2 ------ 275435 ----- 13 ----- 2101
3 ------ 276838 ----- 13 ----- 2102
4 ------ 276870 ----- 13 ----- 2103
5 ------ 276970 ----- 13 ----- 2104
6 ------ 276983 ----- 13 ----- 2105
7 ------ 276995 ----- 13 ----- 2106
8 ------ 277014 ----- 13 ----- 2107
9 ------ 277130 ----- 13 ----- 2108
10 ----- 277350 ----- 13 ----- 2109
11 ----- 277362 ----- 13 ----- 2110
12 ----- 280711 ----- 19 ----- 1204
13 ----- 277374 ----- 13 ----- 2111
14 ----- 277386 ----- 13 ----- 2112
15 ----- 277398 ----- 13 ----- 2201
16 ----- 277450 ----- 13 ----- 2202
17 ----- 277462 ----- 13 ----- 2203
18 ----- 277710 ----- 13 ----- 2204
19 ----- 277770 ----- 13 ----- 2205
20 ----- 277805 ----- 13 ----- 2206
21 ----- 277830 ----- 13 ----- 2207
22 ----- 277842 ----- 13 ----- 2208
23 ----- 280712 ----- 19 ----- 1203
24 ----- 277854 ----- 13 ----- 2209
25 ----- 278030 ----- 13 ----- 2210
etc....


J'ai donc commencé à écrire la requête suivante:

Code :
1
2
3
4
5
6
7
 
SELECT worder, id, type,
       CASE WHEN type = 13 THEN '2'||(100 + ROW_NUMBER() OVER(PARTITION BY type ORDER BY ORDER))
            WHEN type = 19 THEN '120'||(2 + ROW_NUMBER() OVER(PARTITION BY type ORDER BY ORDER))
            END Position
  FROM worksheet
 ORDER BY worder
Mais elle ne me donne que ça :
WORDER --- ID ----- TYPE --- POSITION
1 ------ 280710 ----- 19 ----- 1203
2 ------ 275435 ----- 13 ----- 2101
3 ------ 276838 ----- 13 ----- 2102
4 ------ 276870 ----- 13 ----- 2103
5 ------ 276970 ----- 13 ----- 2104
6 ------ 276983 ----- 13 ----- 2105
7 ------ 276995 ----- 13 ----- 2106
8 ------ 277014 ----- 13 ----- 2107
9 ------ 277130 ----- 13 ----- 2108
10 ----- 277350 ----- 13 ----- 2109
11 ----- 277362 ----- 13 ----- 2110
12 ----- 280711 ----- 19 ----- 1204
13 ----- 277374 ----- 13 ----- 2111
14 ----- 277386 ----- 13 ----- 2112
15 ----- 277398 ----- 13 ----- 2113
16 ----- 277450 ----- 13 ----- 2114
17 ----- 277462 ----- 13 ----- 2115
18 ----- 277710 ----- 13 ----- 2116
19 ----- 277770 ----- 13 ----- 2117
20 ----- 277805 ----- 13 ----- 2118
21 ----- 277830 ----- 13 ----- 2119
22 ----- 277842 ----- 13 ----- 2120
23 ----- 280712 ----- 19 ----- 1205
24 ----- 277854 ----- 13 ----- 2121
25 ----- 278030 ----- 13 ----- 2122
etc.

Alors oui, ça marche pour les 14 premières lignes, mais après... ça se complique.

Comment dois-je faire pour qu'une fois à 1204, il reparte à 1203 (dans le cas du type 19)
Et pour qu'une fois arrivé au 2112, il poursuive par 2201 jusque 2212, puis 2301 jusque 2312, etc... (dans le cas du type 13)

Mercii pour vos conseils et suggestions, ça m'aiderait bien

Henri
h12enri est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2012, 16h56   #2
Rei Ichido
Membre Expert
 
Inscription : août 2009
Messages : 1 012
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 1 012
Points : 1 532
Points : 1 532
Quelque chose du genre :


Code :
1
2
3
4
5
6
7
 
SELECT worder, id, type,
       CASE WHEN type = 13 THEN 1203 + MOD(ROW_NUMBER() OVER(PARTITION BY type ORDER BY WORDER),2))
            WHEN type = 19 THEN 2101 + MOD(ROW_NUMBER() OVER(PARTITION BY type ORDER BY WORDER),12) + 100 * TRUNC(ROW_NUMBER() OVER(PARTITION BY type ORDER BY WORDER)/12))
            END Position
  FROM worksheet
 ORDER BY worder
Non testé du tout, il y a probablement des erreurs de parenthésage, enfin bon c'est l'idée qui compte
Rei Ichido est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 12/12/2012, 17h07   #3
h12enri
Candidat au titre de Membre du Club
 
Homme
Inscription : octobre 2012
Messages : 21
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : octobre 2012
Messages : 21
Points : 10
Points : 10
Fantastique Rei Ichido !!

C'est pas parfait comme tu dis, mais j'ai compris le truc. Merci de m'avoir rediriger vers la bonne voie. Génial
h12enri est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 10h29.


 
 
 
 
Partenaires

Hébergement Web