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 :

Joindre 2 tables avec une date


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    automatisme et réseau
    Inscrit en
    Février 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : automatisme et réseau
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2014
    Messages : 25
    Par défaut Joindre 2 tables avec une date
    Bonjour,

    avec mon code actuel je joint plusieurs tables :
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    DECLARE @DateDebut Datetime = '20170508'
    DECLARE @DateFin Datetime = DATEADD(Day, 0, @DateDebut)
     
    SELECT 
     
           ESt.[DateTimeStart] as Date_debut
          ,Ouv.[ShortLabel]
          ,ESt.[TotalDuration]
     
    FROM [Org].[Zones] Z
    INNER JOIN [Org].[SousZones] sZ	ON z.id = sZ.idZone
    INNER JOIN [Org].[Organes] O	ON O.idSousZone = sZ.id
    INNER JOIN (
    				SELECT *
    				FROM Ref.TagRef
    				--WHERE ShortLabel LIKE 'Ouverture'
    			)  Ouv ON Ouv.idOrgane = O.Id
    INNER JOIN 	(
    				SELECT *
    				FROM Stat.EtatsStat
    			) ESt ON ESt.idEtat = Ouv.idTag
    WHERE  ESt.DateTimeStart >= @DateDebut
    AND      ESt.DateTimeStart <= @DateFin
     
    AND Ouv.Tagname LIKE '%BQ11002%'
    ORDER BY  Est.DateTimeStart ASC

    cela me donne deux lignes :
    Date_debut Shortlabel TotalDuration
    2017-05-08 Ouverture 50940
    2017-05-08 Saturation 112

    J'aimerai que ces données ne forme plus qu'une seule ligne en lien la date, comme ceci :
    Date_debut Shortlabel_ouverture TotalDuration_ouverture Shortlabel_saturation TotalDuration_fermeture
    2017-05-08 Ouverture 50940 Saturation 112

    J'ai essayé mais cela me sors toutes les lignes de cette date au lieu de les joindres.

    J’espère avoir été clair, à l'inverse n'hésitez pas à me demander des détails.

    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Il faut joindre deux fois la table "Ref", une première fois filtrée sur "ouverture" et l'autre sur "saturation".

    Vous aurez alors une seule ligne pour les deux, dans des colonnes distinctes.

    Une autre approche, non standard, consiste à utiliser PIVOT, mais elle est à éviter quand une autre solution simple existe (puisque non standard).

  3. #3
    Membre averti
    Homme Profil pro
    automatisme et réseau
    Inscrit en
    Février 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : automatisme et réseau
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2014
    Messages : 25
    Par défaut
    C'est justement là qu'est le problème, quand je joint 'Ouverture ' avec 'Saturation', cela me génère bcp de lignes, il joint toutes les lignes 'saturation' avec chaque lignes 'ouverture'.

    Comme ci dessous :

    date 1 ouverture1 date 1 saturation1
    date 1 ouverture1 date 2 saturation2
    date 1 ouverture1 date 3 saturation3
    date 1 ouverture1 date 4 saturation4

  4. #4
    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
    Par défaut
    Bonjour

    Pour la double jointure, vous pouvez faire comme ceci
    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
     
     
    DECLARE @DateDebut Datetime = '20170508'
    DECLARE @DateFin Datetime = DATEADD(Day, 0, @DateDebut)
     
    SELECT 
     
           ESt.[DateTimeStart] as Date_debut
          ,Ouv.[ShortLabel]
          ,ESt_OUV.[TotalDuration]
          ,Ferm.[ShortLabel]
          ,ESt_FERM.[TotalDuration] 
    FROM [Org].[Zones] Z
    INNER JOIN [Org].[SousZones] sZ	ON z.id = sZ.idZone
    INNER JOIN [Org].[Organes] O	ON O.idSousZone = sZ.id
    INNER JOIN Ref.TagRef Ouv		ON Ouv.idOrgane = O.Id
    INNER JOIN 	Stat.EtatsStat ESt_OUV ON ESt_OUV.idEtat = Ouv.idTag
    INNER JOIN Ref.TagRef Ferm		ON Ferm.idOrgane = O.Id
    INNER JOIN 	Stat.EtatsStat ESt_FERM ON ESt_Ferme.idEtat = Ouv.idTag
    WHERE  ESt.DateTimeStart >= @DateDebut
    AND      ESt.DateTimeStart <= @DateFin
     
    AND Ouv.Tagname LIKE '%BQ11002%'
    AND Ouv.ShortLabel  = 'Ouverture'
    AND Ferm.ShortLabel  = 'Fermeture'
    ORDER BY  Est.DateTimeStart ASC
    Pour le pivot, vous pouvez le faire de façon normalisée comme ceci
    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
     
     DECLARE @DateDebut Datetime = '20170508'
    DECLARE @DateFin Datetime = DATEADD(Day, 0, @DateDebut)
     
    SELECT 
     
           ESt.[DateTimeStart] as Date_debut
          ,'Ouverture'
          ,MAX(CASE WHEN ShortLabel = 'Ouverture' THEN ESt.[TotalDuration] END)
          ,'Fermeture'
          ,MAX(CASE WHEN ShortLabel = 'Fermeture' THEN ESt.[TotalDuration] END)
     
     
    FROM [Org].[Zones] Z
    INNER JOIN [Org].[SousZones] sZ	ON z.id = sZ.idZone
    INNER JOIN [Org].[Organes] O	ON O.idSousZone = sZ.id
    INNER JOIN Ref.TagRef  Ouv ON Ouv.idOrgane = O.Id
    INNER JOIN 	Stat.EtatsStat ESt ON ESt.idEtat = Ouv.idTag
    WHERE  ESt.DateTimeStart >= @DateDebut
    AND      ESt.DateTimeStart <= @DateFin
     
    AND Ouv.Tagname LIKE '%BQ11002%'
    GROUP BY ESt.[DateTimeStart] as Date_debut
    ORDER BY  Est.DateTimeStart ASC

  5. #5
    Membre averti
    Homme Profil pro
    automatisme et réseau
    Inscrit en
    Février 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : automatisme et réseau
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2014
    Messages : 25
    Par défaut
    Bonjour,

    J'ai trouvé une solution en créant une jointure sur la date de début d'ouverture et de fermeture.
    Votre Solution fonctionne très bien aussi.

    Merci.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/07/2014, 15h28
  2. Joindre deux tables avec max sur date
    Par Asdorve dans le forum Langage SQL
    Réponses: 5
    Dernier message: 26/11/2012, 12h04
  3. Créer une table avec la date du jour dans le titre
    Par dodo69 dans le forum VBA Access
    Réponses: 3
    Dernier message: 15/04/2011, 14h41
  4. Joindre 3 tables avec une au centre !
    Par skydig dans le forum Requêtes
    Réponses: 9
    Dernier message: 26/11/2010, 01h44
  5. Export d'une table avec champs date
    Par luna007 dans le forum Administration
    Réponses: 5
    Dernier message: 26/06/2009, 09h32

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