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 :

Comment diviser les données d'un champs en 2 champs? [AC-2003]


Sujet :

Requêtes et SQL.

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 73
    Points : 38
    Points
    38
    Par défaut Comment diviser les données d'un champs en 2 champs?
    Un exemple:

    Prenons une table ou une requête avec les champs suivants:

    Source / Pole / Fournisseur / Departement / Groupe / Montant

    Dans le champs sources on peut trouver 2 types de type de données:
    Source A
    ou
    Source B

    La somme des montants équivalent à la source A est 1 000
    La somme des montants équivalent à la source B est 1 300


    La question:

    Comment créer une requête qui aurait la structure suivante

    Pole / Fournisseur / Departement / Groupe / Montant source A / Montant source B

    Et que pour chaque somme de montants on retrouve les sommes annoncées ci dessus (respectivement Source A = 1 000 et Source B = 1 300)?

    Merci beaucoup pour votre aide, j'ai essayé plusieurs solutions, mais je ne retrouve pas les bons montants...

  2. #2
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    Une requête d'analyse croisée me semble appropriée.
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    TRANSFORM Sum([Montant]) AS Montant_Source
    SELECT Pole, Fournisseur, Departement, Groupe, Sum([Montant]) As Montant_Total
    FROM LaTable
    GROUP BY Pole, Fournisseur, Departement, Groupe
    PIVOT [Source];
    A+

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 73
    Points : 38
    Points
    38
    Par défaut
    Merci!!!

    ça fonctionne très bien en réadaptant un peu le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TRANSFORM Sum(Montant) AS Montant_Source

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 73
    Points : 38
    Points
    38
    Par défaut
    Et si on souhaite faire l'opération inverse?

    En gros on a 2 champs que l'on souhaite compiler en 1 seul, tout en créant un champ nommé "Source"?

    Merci beaucoup pour vos réponses

  5. #5
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Si par exemple on part d'une table ou d'une requête ayant pour colonnes
    Pole, Fournisseur, Departement, Groupe, [Montant source A], [Montant source B]
    je ferai une requête UNION
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELEC Pole, Fournisseur, Departement, Groupe, [Montant source A] As Source
    FROM LaTableOuRequete
    UNION
    SELEC Pole, Fournisseur, Departement, Groupe, [Montant source B] As Source
    FROM LaTableOuRequete
    A+

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 73
    Points : 38
    Points
    38
    Par défaut
    Merci pour votre réponse;

    Je vais peut être abuser de votre gentillesse, mais j'aurai une dernière question.

    Pour reprendre mon 1er exemple, imaginons que nous ayons le même cas de figure mais avec plusieurs champs de montants:

    Source / Pole / Fournisseur / Departement / Groupe / Montant1 / Montant2 / Montant3

    Dans le champs sources on peut trouver 2 types de type de données:
    Source A
    ou
    Source B

    Comment faire un pivot de manière à obtenir les infos suivantes:

    Pole / Fournisseur / Departement / Groupe / Montant1 source A / Montant1 source B/ Montant2 source A / Montant2 source B/Montant3 source A / Montant3 source B.

    A l'iinverse,

    Si nous avions une table/requête se présentant sous la forme ci dessus; comment pourrions nous la compiler de manière à obtenir une requête organisée de la manière suivante:

    Source / Pole / Fournisseur / Departement / Groupe / Montant1 / Montant2 / Montant3

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 73
    Points : 38
    Points
    38
    Par défaut
    Je crois avoir trouver une solution qui permet de pouvoir trouver une réponse à ma dernière question:

    il faut commencer par une requête UNION

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     SELECT [POLE], [Fournisseur], [Departement], [Groupe], [Montant1] as Total, SOURCE &  "Montant1NAME" As DIMENSION
    FROM [LaTable/LaRequête]
     
    UNION
     
    SELECT [POLE], [Fournisseur], [Departement], [Groupe], [Montant2] as Total, SOURCE &  "Montant2NAME" As DIMENSION
    FROM [LaTable/LaRequête]
     
    UNION
     
    SELECT [POLE], [Fournisseur], [Departement], [Groupe], [Montant3] as Total,SOURCE &  "Montant3NAME" As DIMENSION
    FROM [LaTable/LaRequête];
    La concatenation SOURCE & "NOM" permettra ainsi d'utiliser un pivot avec x colonnes d'agrégats SOURCE & "NOM";

    De cette manière nous aurons une colonne DIMENSION qui référencera chaque type de données à agréger.

  8. #8
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Je pense aussi que la concaténation est le moyen de contourner le fait que, dans une requête analyse croisée,
    le pivot ne peut se faire que sur un champ.

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 73
    Points : 38
    Points
    38
    Par défaut
    Merci beaucoup pour votre aide,

    Ces formules vont m'être très utiles dans mes travaux.

    Cordialement

    Question résolue

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/05/2014, 20h05
  2. comment afficher les données par mois à partir d'un champs date ?
    Par M.a.n.u. dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 18/05/2008, 09h36
  3. comment extraire les données d'un champs
    Par atmar dans le forum VBA Access
    Réponses: 27
    Dernier message: 04/01/2008, 16h58
  4. [cr 8.5] comment exploiter les données d'un "array"
    Par kikidrome dans le forum SAP Crystal Reports
    Réponses: 12
    Dernier message: 09/06/2005, 14h03
  5. [JTable] Comment récuperer les données d'un fichier texte ?
    Par Makunouchi dans le forum Composants
    Réponses: 2
    Dernier message: 03/05/2005, 16h37

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