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 les colonnes d'une requête croisée avec TRANSFORM PIVOT


Sujet :

Requêtes et SQL.

  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut Concaténer les colonnes d'une requête croisée avec TRANSFORM PIVOT
    Bonjour à tous,

    C'est un exercice est en pure SQL, pas d'ajout d'appel à une fonction VBA dont je vous donne la solution en fin de post

    J'ai les données suivantes (jointes en fichier texte)

    RecordID Order Stage Person StageDate
    1 1 A1 Allan 01-May
    2 1 Brody 04-May
    3 1 A2 Cash 05-May
    4 2 A1 Neff 08-May
    5 2 A2 Dub 08-May
    6 2 A3 Duff 09-May
    7 3 A1 Pat 15-May
    8 3 Allan 20-Jun
    9 3 A2 Brody 21-Jun
    10 4 A1 Duff 03-May
    11 4 Brody 05-May
    12 4 A2 Duff 09-May
    13 4 A3 Cash 10-May

    Je veux obtenir

    Order StagePersonDateSeries
    1 A1 Allan 01-May A2 Cash 05-May
    2 A1 Neff 08-May A2 Dub 08-May A3 Duff 09-May
    3 A1 Pat 15-May A2 Brody 21-Jun
    4 A1 Duff 03-May A2 Duff 09-May A3 Cash 10-May


    avec
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    TRANSFORM First([Stage] & [Person] & [StageDate]) AS exp1
    SELECT tblMyData.Order
    FROM tblMyData
    WHERE (((tblMyData.Stage)<>""))
    GROUP BY tblMyData.Order
    PIVOT tblMyData.Stage;

    J'obtiens

    Order StagePersonDateSeries
    1 A1 Allan 01-May A2 Cash 05-May
    2 A1 Neff 08-May A2 Dub 08-May A3 Duff 09-May
    3 A1 Pat 15-May A2 Brody 21-Jun
    4 A1 Duff 03-May A2 Duff 09-May A3 Cash 10-May

    Order StagePersonDateSeries
    1 A1 Allan 01-May A2 Cash 05-May
    2 A1 Neff 08-May A2 Dub 08-May A3 Duff 09-May
    3 A1 Pat 15-May A2 Brody 21-Jun
    4 A1 Duff 03-May A2 Duff 09-May A3 Cash 10-May


    Maintenant comment faire pour fusionner les colonnes de caque lignes ????

    Merci pour votre aide


    Pour le plaisir, solution avec fonction VBA
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DISTINCT tblMyData.Order, SimpleCSV("SELECT [Stage] & ' ' & [Person] & ' ' & [StageDate] FROM tblMyData WHERE [Stage] is not null And [Order] = " & [Order]," ") AS StagePersonDateSeries
    FROM tblMyData;

    Dans un module

    Code VBA : 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 SimpleCSV(strSQL As String, _
                Optional strDelim As String = ",") As String
    'Downloaded from theDBguy's site
    'Returns a comma delimited string of all the records in the SELECT SQL statement
    'Source: http://accessmvp.com/thedbguy
    Option Compare Database
    Option Explicit
     
    Public Function SimpleCSV(strSQL As String, _
                Optional strDelim As String = ",") As String
    'Downloaded from theDBguy's site
    'Returns a comma delimited string of all the records in the SELECT SQL statement
    'Source: http://accessmvp.com/thedbguy
    'v1.0 - 8/20/2013
     
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim strCSV As String
     
    Set db = CurrentDb()
    Set rs = db.OpenRecordset(strSQL, dbOpenSnapshot)
     
    'Concatenate the first (and should be the only one) field from the SQL statement
    With rs
        Do While Not .EOF
            strCSV = strCSV & strDelim & .Fields(0)
            .MoveNext
        Loop
        .Close
    End With
     
    'Remove the leading delimiter and return the result
    SimpleCSV = Mid$(strCSV, Len(strDelim) + 1)
     
    Set rs = Nothing
    Set db = Nothing
     
    End Function
    Fichiers attachés Fichiers attachés
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

  2. #2
    Community Manager

    Avatar de Malick
    Homme Profil pro
    Community Manager
    Inscrit en
    Juillet 2012
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Community Manager
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2012
    Messages : 9 134
    Points : 84 788
    Points
    84 788
    Billets dans le blog
    15
    Par défaut


    Merci pour cette contribution. Toutefois pour ce genre de post, il y a un forum dédié : Contribuez.

    Cordialement,
    Malick
    Vous avez envie de contribuer au sein du Club Developpez.com ? Contactez-nous maintenant !
    Vous êtes passionné, vous souhaitez partager vos connaissances en informatique, vous souhaitez faire partie de la rédaction.
    Il suffit de vous porter volontaire et de nous faire part de vos envies de contributions :
    Rédaction d'articles/cours/tutoriels, Traduction, Contribution dans la FAQ, Rédaction de news, interviews et témoignages, Organisation de défis, de débats et de sondages, Relecture technique, Modération, Correction orthographique, etc.
    Vous avez d'autres propositions de contributions à nous faire ? Vous souhaitez en savoir davantage ? N'hésitez pas à nous approcher.

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    981
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 981
    Points : 1 028
    Points
    1 028
    Billets dans le blog
    36
    Par défaut
    bonjor milkoseck,

    La dernière partie n'est pas essentielle pour moi. L'objet premier de ce post est comment obtenir seulement par SQL

    Order StagePersonDateSeries
    1 A1 Allan 01-May A2 Cash 05-May
    2 A1 Neff 08-May A2 Dub 08-May A3 Duff 09-May
    3 A1 Pat 15-May A2 Brody 21-Jun
    4 A1 Duff 03-May A2 Duff 09-May A3 Cash 10-May


    Le reste c'est cadeau
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

Discussions similaires

  1. Etat avec inversion des colonnes en lignes !
    Par el_aaroubi dans le forum WinDev
    Réponses: 8
    Dernier message: 11/04/2013, 23h16
  2. Concaténer des colonnes et supprimer la colonne d'origine
    Par fherolvera dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/10/2011, 21h49
  3. [XL-2003] transfert de plusieurs lignes en une seule avec ajout des colonnes
    Par ghatfan99 dans le forum Excel
    Réponses: 0
    Dernier message: 10/08/2011, 20h33
  4. Réponses: 4
    Dernier message: 22/06/2010, 11h03
  5. Peut-on faire des colonnes avec "div"
    Par lodan dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 30/07/2006, 06h56

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