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 :

Jointure intervalle d'années.


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Inscrit en
    Juin 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2012
    Messages : 25
    Par défaut Jointure intervalle d'années.
    Bonjour,
    J'ai un petit souci urgent.
    J'aurai besoin de faire une jointure sur un intervalle. Je m'explique :
    Expl
    Table1:
    Id Date Montant
    1 01/01/2009 5
    1 02/05/2012 8
    1 08/08/2014 7
    Table 2 :
    Avec des années : Annee = 2000 à 2020

    => j'ai besoin d'avoir toutes les lignes entre chaque intervalle de temps entre 2009 er 2012 (2009,2010,2011et 2012) puis de 2012 à 2014

    Résultat:
    ID Année Montant
    1 2009 5
    1 2010 5
    1 2011 5
    1 2012 8
    1 2013 8
    1 2014 7


    Je vous remercie d'avance pour votre réactivité.

    Cordialement.

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2003
    Messages : 733
    Billets dans le blog
    8
    Par défaut
    Ci-dessous une solution à votre petit souci urgent :
    Exemple :
    -- 1 : Contenu de la table Table1
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM Table1
    Résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Id   Date         Montant 
    1    2009-01-01   5
    1    2012-05-02   8
    1    2014-08-08   7
    2    2009-02-02   6
    2    2012-04-02   10
    2    2014-07-08   9
    -- 2 - Requête SQL pour obtenir le résultat attendu :
    Code SQL : 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
    with C AS 
     ( SELECT Id, Annee FROM 
            (SELECT Id  FROM Table1 
             GROUP BY Id ) as A 
             CROSS JOIN Table2     
        ) 
       SELECT C.Id,  C.Annee, 
              COALESCE(T1.Montant  , ( SELECT TOP 1  Z.Montant 
                             FROM Table1 Z 
                             WHERE Z.Id = C.Id 
                             AND  Year(Z.Date) < C.Annee
                             ORDER BY Z.DATE DESC)) AS Montant
    FROM C 
    LEFT OUTER JOIN Table1 T1 
      ON   T1.id = C.id 
      AND  YEAR(T1.date)  = C.Annee 
    ORDER BY C.ID, C.Annee
    Résultat :
    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
    Id	Annee	Montant
    1	2009	5
    1	2010	5
    1	2011	5
    1	2012	8
    1	2013	8
    1	2014	7
    1	2015	7
    1	2016	7
    1	2017	7
    1	2018	7
    1	2019	7
    1	2020	7
    2	2009	6
    2	2010	6
    2	2011	6
    2	2012	10
    2	2013	10
    2	2014	9
    2	2015	9
    2	2016	9
    2	2017	9
    2	2018	9
    2	2019	9
    2	2020	9
    A+

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/04/2013, 10h37
  2. extraire année(date) avec une jointure = erreur
    Par gastoncs dans le forum Requêtes
    Réponses: 4
    Dernier message: 12/10/2012, 11h16
  3. Jointure complexe / intervalle de date
    Par Isildur dans le forum Langage SQL
    Réponses: 14
    Dernier message: 17/12/2011, 03h30
  4. Réponses: 3
    Dernier message: 11/10/2011, 16h56
  5. intervalle de date jour mois année
    Par mia_fr5 dans le forum SAS Base
    Réponses: 20
    Dernier message: 15/06/2009, 23h16

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