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 :

Faire une ligne avec plusieurs lignes issues d'une table historisée


Sujet :

MS SQL Server

  1. #1
    Membre actif Avatar de arthuro45
    Profil pro
    Développeur du dimanche
    Inscrit en
    Juillet 2009
    Messages
    602
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur du dimanche

    Informations forums :
    Inscription : Juillet 2009
    Messages : 602
    Points : 265
    Points
    265
    Par défaut Faire une ligne avec plusieurs lignes issues d'une table historisée
    Bonjour,

    Le titre n'est pas très clair , je m'explique :

    Je suis sous SqlServeur 2005.

    Je dois extraire les dates de débuts et de fin d'une équipe dans une table historisée.
    Le résultat en image de la requête actuelle est ci-dessous.

    J'aimerais récupérer la date MIN de Debut, et la date MAX de Fin en regroupant sur chaque Equipe.

    Le résultat devrait être ça :

    Matric Debut Fin Equipe
    213486 23/12/2009 11/04/2010 LITIGES
    213486 12/04/2010 31/12/2100 GESTIONNAIRES

    Pour l'instant voici ma requête qui donne le résultat ci-dessous :

    SELECT
    B.rowid
    ,B.matric
    ,CONVERT(VARCHAR, dsitud, 103) AS Debut
    ,CONVERT(VARCHAR, dsituf, 103) AS Fin
    ,C.libser AS Equipe
    FROM PERSVAR B
    JOIN SER C ON C.serid = B.serid <-- Récupère le libellé de l'équipe
    WHERE B.matric = '213486'

    Merci pour aide.
    Images attachées Images attachées  

  2. #2
    Invité
    Invité(e)
    Par défaut
    Si tu commençais par nous donner la structure des tables en jeu avec un jeu de test, comme stipulé par les règles du forum, on pourrait t'aider.

  3. #3
    Membre actif Avatar de arthuro45
    Profil pro
    Développeur du dimanche
    Inscrit en
    Juillet 2009
    Messages
    602
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur du dimanche

    Informations forums :
    Inscription : Juillet 2009
    Messages : 602
    Points : 265
    Points
    265
    Par défaut
    Si tu commençais par nous donner la structure des tables en jeu avec un jeu de test, comme stipulé par les règles du forum, on pourrait t'aider.
    Exact :

    Table PERSVAR :

    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
    USE [TEST]
    GO
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    SET ANSI_PADDING ON
    GO
    CREATE TABLE [dbo].[PERSVAR](
    	[ROWID] [int] NOT NULL,
    	[MATRIC] [int] NULL,
    	[DSITUD] [datetime] NULL,
    	[DSITUF] [datetime] NULL,
    	[SERID] [varchar](6) COLLATE French_CI_AS NULL,
     CONSTRAINT [PK_VAR2] PRIMARY KEY CLUSTERED 
    (
    	[ROWID] ASC
    )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY]
     
    GO
    SET ANSI_PADDING OFF

    Table SER :

    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
    USE [TEST]
    GO
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    SET ANSI_PADDING ON
    GO
    CREATE TABLE [dbo].[SER](
    	[ROWID] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
    	[SERID] [varchar](6) COLLATE French_CI_AS NOT NULL,
    	[LIBSER] [varchar](30) COLLATE French_CI_AS NULL,
     CONSTRAINT [PK_SER] PRIMARY KEY CLUSTERED 
    (
    	[ROWID] ASC
    )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY]
     
    GO
    SET ANSI_PADDING OFF
    Le jeux de données :

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    --Table PERSVAR
     
    INSERT INTO [TEST].[dbo].[PERSVAR]
               ([ROWID]
               ,[MATRIC]
               ,[DSITUD]
               ,[DSITUF]
               ,[SERID])
         VALUES
               ('374'
               ,'213486'
               ,'2009-12-23'
               ,'2010-01-03'
               ,'LITIGES')
     
    INSERT INTO [TEST].[dbo].[PERSVAR]
               ([ROWID]
               ,[MATRIC]
               ,[DSITUD]
               ,[DSITUF]
               ,[SERID])
         VALUES
               ('519'
               ,'213486'
               ,'2010-01-04'
               ,'2010-01-24'
               ,'LITIGES')
     
    INSERT INTO [TEST].[dbo].[PERSVAR]
               ([ROWID]
               ,[MATRIC]
               ,[DSITUD]
               ,[DSITUF]
               ,[SERID])
         VALUES
               ('590'
               ,'213486'
               ,'2010-01-25'
               ,'2010-04-11'
               ,'LITIGES')
     
    INSERT INTO [TEST].[dbo].[PERSVAR]
               ([ROWID]
               ,[MATRIC]
               ,[DSITUD]
               ,[DSITUF]
               ,[SERID])
         VALUES
               ('714'
               ,'213486'
               ,'2010-04-12'
               ,'2010-07-05'
               ,'GESTIONNAIRES')
     
    INSERT INTO [TEST].[dbo].[PERSVAR]
               ([ROWID]
               ,[MATRIC]
               ,[DSITUD]
               ,[DSITUF]
               ,[SERID])
         VALUES
               ('803'
               ,'213486'
               ,'2010-07-06'
               ,'2100-12-31'
               ,'GESTIONNAIRES')
     
    --Table SER
     
    INSERT INTO [TEST].[dbo].[SER]
               ([ROWID]
               ,[SERID]
               ,[LIBSER])
         VALUES
               ('5'
               ,'LITIGE'
               ,'LITIGES')
     
    INSERT INTO [TEST].[dbo].[SER]
               ([ROWID]
               ,[SERID]
               ,[LIBSER])
         VALUES
               ('13'
               ,'GEST'
               ,'GESTIONNAIRES')

  4. #4
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Bonsoir,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT
    C.libser AS Equipe
    ,CONVERT(VARCHAR, MIN(dsitud), 103) AS Debut
    ,CONVERT(VARCHAR, MAX(dsituf), 103) AS Fin
    FROM PERSVAR B
    INNER JOIN SER C 
     ON C.serid = B.serid <-- Récupère le libellé de l'équipe
    WHERE B.matric = '213486'
    GROUP BY C.libser
    ++

  5. #5
    Membre actif Avatar de arthuro45
    Profil pro
    Développeur du dimanche
    Inscrit en
    Juillet 2009
    Messages
    602
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur du dimanche

    Informations forums :
    Inscription : Juillet 2009
    Messages : 602
    Points : 265
    Points
    265
    Par défaut
    Grand merci votre requête fonctionne parfaitement.

    Ce n'était pourtant pas compliqué

  6. #6
    Membre actif Avatar de arthuro45
    Profil pro
    Développeur du dimanche
    Inscrit en
    Juillet 2009
    Messages
    602
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur du dimanche

    Informations forums :
    Inscription : Juillet 2009
    Messages : 602
    Points : 265
    Points
    265
    Par défaut
    Une dernière question sur ce post :

    Comment faire avec ORDER BY pour les classer par date "dsitud" ?

    J'ai une erreur et je ne vois pas d'autres moyens pour les classer, si j'ajoute "dsitud" au GROUP BY j'ai à nouveau plus de lignes que désiré ce qui est normal
    :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Column "PERSVAR.DSITUD" is invalid in the ORDER BY clause because it is not contained in either an aggregate function or the GROUP BY clause.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT
    CONVERT(VARCHAR, MIN(dsitud), 103) AS Debut
    ,CONVERT(VARCHAR, MAX(dsituf), 103) AS Fin
    ,C.libser AS Equipe
    FROM PERSVAR B
    INNER JOIN SER C 
     ON C.serid = B.serid
    WHERE B.matric = '213486'
    GROUP BY C.libser
    ORDER BY dsitud

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

Discussions similaires

  1. avec plusieurs lignes retourner une ligne
    Par polpaulin dans le forum Requêtes
    Réponses: 14
    Dernier message: 03/11/2011, 13h13
  2. [Toutes versions] Plusieurs lignes avec identifiant en une ligne par identifiant
    Par spleen92 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 17/05/2011, 07h41
  3. [WD-2007] publipostage avec plusieurs lignes comment faire ?
    Par rogerfon dans le forum Word
    Réponses: 2
    Dernier message: 20/02/2011, 12h59
  4. Diviser une lignes en plusieurs lignes avec règle d'intégration
    Par briceg dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 21/10/2009, 14h27
  5. [MySQL] Comment affiché un résultat avec plusieurs lignes et plusieurs champs dans un tableau
    Par Yagami_Raito dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 15/05/2007, 14h19

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