IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Incrémenter des valeurs


Sujet :

SQL Oracle

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2012
    Messages : 33
    Points : 29
    Points
    29
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre chevronné
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Points : 1 806
    Points
    1 806
    Par défaut
    Quelque chose du genre :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2012
    Messages : 33
    Points : 29
    Points
    29
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2010] 'incrémenter des valeurs
    Par pascal159 dans le forum Access
    Réponses: 1
    Dernier message: 15/09/2014, 18h38
  2. Shell : incrémentation des valeurs d'un tableau
    Par mimilay dans le forum Shell et commandes GNU
    Réponses: 8
    Dernier message: 27/11/2010, 13h09
  3. Script pour incrémenter des valeurs
    Par php_de_travers dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 11/05/2009, 17h08
  4. Réponses: 2
    Dernier message: 11/02/2008, 21h47
  5. [VBA-E] incrémenter des valeurs excel grâce à des boutons
    Par keiserjo dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/07/2006, 11h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo