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 :

Création d'une période


Sujet :

MS SQL Server

  1. #1
    Membre habitué Avatar de Poisson59
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 213
    Points : 140
    Points
    140
    Par défaut Création d'une période
    Bonjour,

    J'ai la table MATABLE suivante :

    N° APPEL.......ETAT.......DATE
    1234 ..............5........14/06/2007
    1234 ..............6........17/06/2007
    1234 ..............7........19/06/2007
    6684 ..............3........26/06/2007
    6684 ..............4........30/06/2007
    au final je voudrais

    N° APPEL.......ETAT.......DATE_DEBUT...........DATE_FIN
    1234 ..............5...........14/06/2007............17/06/2007
    1234 ..............6...........17/06/2007............19/06/2007
    1234 ..............7...........19/06/2007............31/12/2099
    6684 ..............3...........26/06/2007............30/06/2007
    6684 ..............4...........30/06/2007............31/12/2099
    PS : Quand ya pas de date suivante je force à 31/12/2099


    Merci

  2. #2
    Membre éprouvé
    Avatar de HULK
    Inscrit en
    Juillet 2003
    Messages
    1 276
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 276
    Points : 1 281
    Points
    1 281
    Par défaut
    avec un curseur dans une procedure stockée : (si tu as beaucoup de lignes, ca peut etre long)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    DECLARE @DATE datetime
     
    DECLARE curseur CURSOR FOR
     
    select date from matable
     
    OPEN curseur
    FETCH NEXT FROM curseur INTO
    @DATE 
    WHILE @@FETCH_STATUS = 0
    BEGIN
     
    UPDATE MATABLE SET DATE_FIN = (SELECT MIN(DATE) FROM MATABLE WHERE DATE > @DATE) WHERE DATE = @DATE
     
    FETCH NEXT FROM curseur INTO
    @DATE 
    END
    Close curseur
    DEALLOCATE curseur

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 896
    Points : 53 126
    Points
    53 126
    Billets dans le blog
    6
    Par défaut
    HULK quelle horreur une telle daube alors que sans curseur c'est ULTRA simple en 1 requête !!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    CREATE TABLE SAV 
    (NUM_APPEL INT, 
     ETAT INT, JOUR DATETIME)
     
    SET DATEFORMAT mdy
     
    INSERT INTO SAV VALUES (1234, 5, '14/06/2007')
    INSERT INTO SAV VALUES (1234, 6, '17/06/2007') 
    INSERT INTO SAV VALUES (1234, 7, '19/06/2007')
    INSERT INTO SAV VALUES (6684, 3, '26/06/2007')
    INSERT INTO SAV VALUES (6684, 4, '30/06/2007') 
     
    SELECT T1.NUM_APPEL, T1.ETAT, T1.JOUR AS DEBUT, 
           COALESCE(MIN(T2.JOUR), '20991231') AS FIN
    FROM   SAV T1
           LEFT OUTER JOIN SAV T2
                 ON T1.NUM_APPEL = T2.NUM_APPEL
                    AND T1.JOUR < T2.JOUR
    GROUP BY T1.NUM_APPEL, T1.ETAT, T1.JOUR
     
    NUM_APPEL   ETAT        DEBUT                       FIN                       
    ----------- ----------- --------------------------- --------------------------
    1234        5           2007-06-14 00:00:00.000     2007-06-17 00:00:00.000
    1234        6           2007-06-17 00:00:00.000     2007-06-19 00:00:00.000
    1234        7           2007-06-19 00:00:00.000     2099-12-31 00:00:00.000
    6684        3           2007-06-26 00:00:00.000     2007-06-30 00:00:00.000
    6684        4           2007-06-30 00:00:00.000     2099-12-31 00:00:00.000

    SVP transformez moi ça,en vue comme ça plus deproblème !

    A +

  4. #4
    Membre habitué Avatar de Poisson59
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 213
    Points : 140
    Points
    140
    Par défaut
    Merci HULK Et SQLPro !

Discussions similaires

  1. Réponses: 7
    Dernier message: 13/11/2014, 11h57
  2. [WD16] [PLANNING][Choix d'une période et création d'un rdv]
    Par pedro_delavega dans le forum WinDev
    Réponses: 2
    Dernier message: 03/08/2012, 15h08
  3. [AC-2007] Création d'une table de période de date
    Par Bolak dans le forum Modélisation
    Réponses: 14
    Dernier message: 01/04/2011, 19h56
  4. Création d'une base avec IbConsole
    Par Lucien dans le forum Outils
    Réponses: 3
    Dernier message: 02/03/2004, 18h34
  5. [BES] Création d'une variable d'environnement
    Par NGI80 dans le forum Autres
    Réponses: 2
    Dernier message: 17/10/2002, 07h31

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