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

MS SQL Server Discussion :

SQL server Gestion date


Sujet :

MS SQL Server

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 143
    Points : 55
    Points
    55
    Par défaut SQL server Gestion date
    Bonjour a tous,

    J'ai un petit problème de logique, voilà, j'ai des factures impayées que je dois mettre à jour en fonction de leur date.

    Statut_id=1 => A jour
    Statut_id=2 => + 3mois
    Statut_id=3 => + 6mois
    Statut_id=4 => + 9 mois

    Pour l'update statut 2 et 3, pas de souci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE dbo.Facture SET Statut_id=2 WHERE date BETWEEN DATEADD(month,-3,GETDATE()) AND GETDATE() AND ISNULL(FacturePayee,0) = 0
    UPDATE dbo.Facture SET Statut_id=3 WHERE date BETWEEN DATEADD(month,-6,GETDATE()) AND DATEADD(month,-3,GETDATE()) AND ISNULL(FacturePayee,0) = 0
    En revanche, je n'arrive pas à faire ma reqête SQL d'UPDATE pour UPDATER uniquement les factures à + 9 mois...


    Merci pour vos aides et conseils!!

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,


    Vous pouvez tout mettre à jour en une seule requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    UPDATE dbo.Facture 
    SET Statut_id= CASE 
                              WHEN FacturePayee = 1 THEN 1
                              WHEN date > DATEADD(MONTH, -3, GETDATE()) THEN 2 
                              WHEN date > DATEADD(MONTH, -6, GETDATE()) THEN 3
                              WHEN date > DATEADD(MONTH, -9, GETDATE()) THEN 4
                          END
    A adapter sans doute, car vous n'avez précisé ni le type de vos colonnes, ni les règles de gestion pour le statut "à jour" (j'ai supposé que c'était le cas où FacturePayee = 1)

    Notez cependant que vous ne devriez pas avoir cette colonne telle quelle dans votre table, faites plutôt une colonne calculée ou une vue

    Par ailleurs, "date" est un mot réservé, et vous devriez donner un autre nom à votre colonne.

  3. #3
    Membre éprouvé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 623
    Points : 1 049
    Points
    1 049
    Par défaut
    Bonjour,
    A ta place, j'utiliserais un DATEDIFF plutôt qu'un DATEADD. Et je le ferais en 1 passe. Ca devrait donner un truc comme ca (comme tu n'as pas fourni tes DDL, je ne sais pas si ca va fonctionner, je n'ai pas pu tester...) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE dbo.Facture
    SET Statut_id = CASE WHEN DATEDIFF(MONTH, date, getdate()) < 3 THEN 2
    					WHEN DATEDIFF(MONTH, date, getdate()) BETWEEN 3 and 6 THEN 3
    					ELSE 4 END
    WHERE ISNULL(FacturePayee,0) = 0

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 143
    Points : 55
    Points
    55
    Par défaut
    merci pour vos réponses mais ça ne fonctionne pas...

    Concrètement, les dates de factures jusqu'à 3 mois restent statut 1, les datent de plus de 3 mois et de moins de 6 mois passent en statut 2, les dates de plus de 6 mois et de moins de 9 mois en statut 3 et les dates supérieurs à 9 mois en statut4 .

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 143
    Points : 55
    Points
    55
    Par défaut
    Mea Culpa, aieeeuuuu, ta solution fonctionne!

    Enfin, en partie, car il semble que cela pose problème sur les factures datant de 2012...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    UPDATE dbo.Facture 
    SET Statut_id= CASE 
     
                              WHEN date > DATEADD(MONTH, -3, GETDATE()) THEN 2 
                              WHEN date > DATEADD(MONTH, -6, GETDATE()) THEN 3
                              WHEN date > DATEADD(MONTH, -9, GETDATE()) THEN 4
                              else 1
                          END
    facture en date du 01/04/2013, statut 4, parfait!
    Facture en date du 01/10/2012 statut 1...

  6. #6
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Comme je disais, il faudra adapter. a quoi correspond le statut 1 ? quand le mettre ? par ailleurs la regle de gestion n'est pas claire :

    Pour le statut 2 : est-ce pour les facture avec un retard entre 1 jour et 3 mois, ou entre 3 mois et 6 mois ?

    pour le problème des facture de 2012, il faut les prendre en compte dans le ELSE, mais dans ce cas, il faut filtrer par un WHERE pour ne mettre à jour que les factures en défaut de paiement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    UPDATE dbo.Facture 
    SET Statut_id= CASE 
     
                              WHEN date > DATEADD(MONTH, -3, GETDATE()) THEN 2 
                              WHEN date > DATEADD(MONTH, -6, GETDATE()) THEN 3
                              ELSE 4
     
                          END
    WHERE  ???

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 143
    Points : 55
    Points
    55
    Par défaut
    Hello,

    Alors le statut 1 correspond au statut par défaut, à la création d'une facture et ce jusquà 3 mois
    le statut 2 correpond au facture de plus de 3 mois et de moins de 6 mois,
    le statut 3 correspond aux factures entre 6 et 9 mois
    le statut 4 correspond aux factures de plus de 9 mois.

    J'ai bien compris qu'il fallait l'adapter mais je ne vois toujours pas comment faire...

  8. #8
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Alors les deux premières requêtes que vous aviez présentées sont fausses : elles sont "décalées" d'un statut :
    statut 2 pour 0 à -3 mois,...

    avec ces regles de gestion, la requête devient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    UPDATE dbo.Facture 
    SET Statut_id= CASE 
                              WHEN date > DATEADD(MONTH, -3, GETDATE()) THEN 1  
                              WHEN date > DATEADD(MONTH, -6, GETDATE()) THEN 2
                              WHEN date > DATEADD(MONTH, -9, GETDATE()) THEN 3 
                              ELSE 4
                          END

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 143
    Points : 55
    Points
    55
    Par défaut
    Hahahaha!

    Effectivement cela semble correct!

    Merci pour votre patience sur ce problème, au final pas très compliqué!

    Bonne journée!

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

Discussions similaires

  1. [SQL server] Gestion du temps
    Par Chtulus dans le forum Développement
    Réponses: 2
    Dernier message: 02/06/2008, 16h52
  2. sql server et date du system
    Par Romantic_a dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 16/05/2008, 14h09
  3. sql server champ date
    Par Alex35 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 12/12/2007, 13h35
  4. [SQL SERVER] Conversion date en string
    Par taska dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 31/05/2007, 15h26
  5. [SQL Server] Pb Date et Montant derniere commande
    Par marman dans le forum Langage SQL
    Réponses: 7
    Dernier message: 12/10/2006, 19h21

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