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

Développement SQL Server Discussion :

Ajout d'un champ incrément dans une table


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Octobre 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 5
    Par défaut Ajout d'un champ incrément dans une table
    Bonjour
    Besoin : Ajout d'un champ AUTO incrément dans une table selon des critères
    Exp.
    Table Ecriture comptable :

    Champs Composer de code Journal/Année/Mois/Incrément

    Ecriture dans un journal OD le 01/08/2015
    Champ: OD15080001


    Ecriture dans un journal OD le 01/09/2015
    Champ: OD15090001

  2. #2
    Expert éminent
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 218
    Billets dans le blog
    16
    Par défaut
    Bonsoir,


    Supposons que vous ayez la structure de table suivante :


    
    create table ecriture
    (
            id                 int             not null  identity
          , code_journal       char(2)         not null 
          , annee              char(2)         not null
          , mois               char(2)         not null
          , increment          int             not null  default 0
        , constraint ecriture_pk primary key (id)
    ) ;
    
    

    Les inserts suivants font l’objet d’une incrémentation relative pour l’attribut increment :

    
    INSERT INTO ecriture 
        SELECT 'OD', '15','08', 
               (SELECT COALESCE(MAX(increment), 0) + 1 -- COALESCE, à cause de NULL au départ
                FROM   ecriture
                WHERE  code_journal = 'OD' and annee = '15' and mois = '08') ; 
    
    INSERT INTO ecriture 
        SELECT 'OD', '15','08', 
               (SELECT COALESCE(MAX(increment), 0) + 1 
                FROM   ecriture
                WHERE  code_journal = 'OD' and annee = '15' and mois = '08') ; 
    
    
    Au résultat :

    
    Id    code_journal    annee    mois    increment
    --    ------------    -----    ----    ---------
     1    OD              15       08              1
     2    OD              15       08              2
    
    

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Octobre 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 5
    Par défaut
    MERCI
    Mais j'ai trouvé une solution en utilisant la fonction DENSE_RANK()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ",DENSE_RANK () OVER
        (PARTITION BY CONCAT(DOS,'-',JNL,'-',Year(ECRDT),'-',Month(ECRDT)) ORDER BY ECRNO DESC) AS Rank
    from Ecriture
    Par contre je veux faire un trigger dans la table pour stocker le résultat de cette requête à chaque alimentation de la table Ecriture.

    ---
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE Ecriture 
    SET Ecriture .ISS_ECRNO = (SELECT DENSE_RANK () OVER
        (PARTITION BY CONCAT(I.DOS,'-',I.JNL,'-',Year(I.ECRDT),'-',Month(I.ECRDT)) ORDER BY I.ECRNO DESC) AS Rank
    from Ecriture I WHERE Ecriture .ID = I.ID )
    Mais ça me donne une seule valeur à chaque fois

Discussions similaires

  1. Comment obtenir un champs auto incrémenté dans une table DBase IV ?
    Par souminet dans le forum Bases de données
    Réponses: 1
    Dernier message: 11/12/2007, 13h55
  2. [Requête/SQL]ajouter un champ calculé dans une table
    Par zougna dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 17/04/2007, 19h09
  3. Créer un champ calculé dans une table
    Par tigevellou dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 21/04/2006, 15h08
  4. Tous les champs SAUF dans une table.
    Par Yepazix dans le forum Bases de données
    Réponses: 1
    Dernier message: 28/08/2005, 16h01
  5. Ajout/Suppression dynamique des lignes dans une table
    Par codexomega dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 13/08/2005, 18h50

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