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

Requêtes et SQL. Discussion :

Concaténer des lignes dans des grosses requêtes [AC-2010]


Sujet :

Requêtes et SQL.

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 525
    Points : 194
    Points
    194
    Par défaut Concaténer des lignes dans des grosses requêtes
    Bonjour

    Dans une table j'ai un patient (avec un numéro unique), qui a une chirurgie composée de plusieurs actes. Pour simplifier, je fais une table avec une lettre code pour chaque acte.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    NIP           Dateacte                 Code
    123           01/02/2014               P
    123           01/02/2014               v
    123           10/02/2014               H
    123           10/02/2014               P
    J'ai fais une fonction pour concaténer sous la forme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    NIP          Dateacte                 Codeconcatene
    123          01/02/2014              PV
    123          10/02/2014              HP
    La fonction

    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
     
     
    Public Function concatenerLigne(strNIP As String, strDate As String) As String
     
    On Error Resume Next
     
    Dim db As DAO.Database
    Dim rst As DAO.Recordset
    Dim strResult As String
    Dim strRst As String
     
    Set db = CurrentDb()
    strResult = ""
     
    strRst = "Select Code From [DXC_CCAM_Code] Where [NIP]=""" & strNIP & """ AND [Dateacte]=#" & strDate & "#;"
     
    Set rst = db.OpenRecordset(strRst, dbOpenSnapshot)
    With rst
        If Not .BOF Then
            .MoveFirst
            Do Until .EOF
     
                If strResult = "" Then
                    strResult = .Fields("Code")
                Else
                    strResult = strResult & strSep & .Fields("Code")
                End If
            .MoveNext
            Loop
        End If
    End With
     
     
    rst.Close: Set rst = Nothing
    db.Close: Set db = Nothing
    concatenerLigne = strResult
     
    End Function
    La requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT DXC_CCAM_Code.NIP, DXC_CCAM_Code.Dateacte, concatenerLigne([NIP],Format([Dateacte],"yyyy/mm/dd")) AS CodeResume
    FROM DXC_CCAM_Code
    GROUP BY DXC_CCAM_Code.NIP, DXC_CCAM_Code.Dateacte, concatenerLigne([NIP],Format([Dateacte],"yyyy/mm/dd"));
    Cela fonctionne mais la requête est loooooonnnnggguuuueeee ! J'ai changé la snapshot en OpenDynaset mais pas plus rapide.
    Auriez-vous une idée d'une autre requête ? stratégie ? J'ai beau réflechir, je ne vois pas .
    Merci par avance pour vos suggestions.

  2. #2
    Membre expert
    Avatar de alassanediakite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Points : 3 590
    Points
    3 590
    Billets dans le blog
    8
    Par défaut
    Salut
    Essaye...

    Vu la requête je pense qu'il y aura des doublons (des lignes qui se répètent). Il faut alors placer DISTINCT...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT DXC_CCAM_Code.NIP, DXC_CCAM_Code.Dateacte, concatenerLigne([NIP],Format([Dateacte],"yyyy/mm/dd")) AS CodeResume
    FROM DXC_CCAM_Code
    GROUP BY DXC_CCAM_Code.NIP, DXC_CCAM_Code.Dateacte, concatenerLigne([NIP],Format([Dateacte],"yyyy/mm/dd"));
    Ce fameux DISTINCT me fait penser à essayer ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT NIP, Dateacte, concatenerLigne([NIP],Format([Dateacte],"yyyy/mm/dd")) AS CodeResume
    FROM (SELECT DISTINCT NIP, Dateacte FROM DXC_CCAM_Code) as rq;
    nous éliminons les doublons puis nous appelons la fonction de concaténation.
    @+

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 525
    Points : 194
    Points
    194
    Par défaut
    Tout simplement impressionnant ! 15 minutes avant, 1 seconde aprés ! Pourrais-tu me donner une petite explication ? Quel est le role de l'index ?
    Merci mille fois.

  4. #4
    Membre expert
    Avatar de alassanediakite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Points : 3 590
    Points
    3 590
    Billets dans le blog
    8
    Par défaut
    Salut
    Le rôle de l'index dans un livre est typiquement la même chose que dans une base de données. Pour plus d'info. Prions pour que l'auteur nous donne la suite (2/2). (Pour le moment, tu sauteras ses commentaires sur ACCESS )
    @+

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 525
    Points : 194
    Points
    194
    Par défaut
    C'est compris. Encore merci !

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 22/06/2014, 01h01
  2. Requête SQL mettre des ligne dans des colonnes
    Par karim66 dans le forum Requêtes
    Réponses: 2
    Dernier message: 22/02/2012, 20h57
  3. copier des lignes dans des feuilles designées
    Par arctica dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 23/09/2009, 13h14
  4. Détecter des lignes dans des champs
    Par afef_master dans le forum Traitement d'images
    Réponses: 11
    Dernier message: 13/03/2009, 18h19
  5. Figer des lignes et des colonnes dans un tableau
    Par Opo dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 15/11/2006, 16h10

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