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 :

[Requêtes] opérations sur chaînes de caractères


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 20
    Points : 10
    Points
    10
    Par défaut [Requêtes] opérations sur chaînes de caractères
    bonjour, voici mon premier post ( merci d'être indulgent )

    Après avoir recherché dans la F.A.Q. je me suis décidé à venir poster mon problème :

    voilà, je dois présenter un formulaire dans lequel on retrouve les résultats d'une requête avec différentes opérations (somme) cependant ma requête s'établit sur 2 lignes car il existe dans ma requête 2 champs avec des chaîne de caractères.

    Comment puis-je faire pour présenter sur une seule ligne ma requête ?

    ex: j'ai 2 produits A et B avec des caractéristiques pour chacun d'eux ( prix unitaire, poids ... ), j'ai fait une somme des caractéristiques mais le résultat de la requête tiend sur 2 lignes à cause du nom des produits A et B.

    Merci d'avance !

  2. #2
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 316
    Points : 367
    Points
    367
    Par défaut
    Bonjour,

    donne la structure de la table et un exemple.

    A+

  3. #3
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Le nom des produits doit disparaître, si il est affiché, access te donnera autant de ligne qu'il n'y a de produits différents.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 41
    Points : 40
    Points
    40
    Par défaut
    Si tu as deux produits A et B et que la requete te renvoi deux lignes, c'est qu'il n'y a pas de somme....

    Dans ton SELECT, ne met que la (les) somme(s), tu ne devrai alors avoir qu'une seule ligne

  5. #5
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    j'ai une table : Prod avec 10 champs dont Prix, quantité, poids et nom_prod

    j'ai fait une requete avec la somme de chacun des champs nécessaire,
    mon souci est que le résultat de la requête s'établit sur autant de ligne qu'il y a de produit et ma volonté serait de pouvoir présenter tout ça sur 1 seule ligne.
    (PS: ma requête est en QBE)

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 41
    Points : 40
    Points
    40
    Par défaut
    j'ai une table : Prod avec 10 champs dont Prix, quantité, poids et nom_prod

    j'ai fait une requete avec la somme de chacun des champs nécessaire,
    mon souci est que le résultat de la requête s'établit sur autant de ligne qu'il y a de produit et ma volonté serait de pouvoir présenter tout ça sur 1 seule ligne.
    (PS: ma requête est en QBE)
    La requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT SUM(Prix),SUM(quantité),SUM(poids) FROM Prod
    ne doit va te renvoyer qu'une ligne.

    Si tu ajoute la colonne nom_prod, il va te faire la somme pour chaque produit (si tu as 10 produits différents il te fera 10 lignes de résultats)

    En gros quel est ton but?
    Tu veux savoir combien il va devoir payer ses 10 produits?
    tu ne met QUE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     SELECT SUM(Prix) FROM Prod
    et tu as la somme.
    si tu met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     SELECT SUM(Prix),nom_prod FROM Prod GROUP BY nom_prod
    il va te donner le prix pour CHAQUE produit, donc autant de lignes que de produits différents

  7. #7
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    je veux combiner le prix, la quantité,..etc des produits mais que l'on distingue à un endroit le nom de ces produits.

    Merci pour votre aide en tout cas

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 41
    Points : 40
    Points
    40
    Par défaut
    Donc si tu veux distinguer les produits, il te fera autant de lignes que de produits!

    Ou tu veux avoir la somme et les produits dans une chaine concaténée?
    Exemple:
    nom_prod prix quantité
    A 30 3
    B 50 10

    Résultat:
    A,B 80 13

  9. #9
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    oui !!!!

    Voilà c'est ce que je voudrais !
    A,B " somme prix " ; " somme qtté " ; ...

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 41
    Points : 40
    Points
    40
    Par défaut
    Pas de chance, il n'y a pas de fonction toute faite pour ca.

    J'ai eu un probleme similaire et j'ai utilisé un contournement:
    C'est super moche mais ca donne le résultat, si quelqu'un a mieux je suis preneur

    Dans un module tu fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    global chaine as string
    Public Function concatener(s As String)
        If InStr(1, chaine, " " & s & ",") <= 0 Then
            chaine = chaine & " " & s & ","
        End If
        concatener = chaine
    End Function
    maintenant l'appel
    C'est pas rigolo car il faut tout initialiser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    chaine = ""
    docmd.runSQL "SELECT concatener(nom_produit) FROM Prod"
    Set rs = OpenRecordset("SELECT concatener(nom_produit),SUM(Prix) FROM Prod Group By concatener(nom_produit)"
    ton recordset contient le résultat voulu.
    Il faut faire attention à 2 points:
    1) réinitialiser la chaine avant tou traitement
    2) faire un premier passage avec une requete pour que la chaine soit remplie

    après tu lis ta requete comme tu veux (dans l'exemple par un recordset)

    Voila.
    Si qq'un sait comment créer une fonction d'aggrégat en Jet SQL (VBA) je suis preneur

  11. #11
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    oké merci de ton aide !!

    j'essaie dès que possible en esperant que ça marche !

  12. #12
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 911
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 911
    Points : 4 809
    Points
    4 809
    Par défaut
    Une fonction utilisant ce code devait le faire :
    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
     
     Dim arrData As Variant
        Dim maBd As DAO.database
        Dim rst As DAO.Recordset
        Dim sResult As String
        Dim i As Integer, j As Integer, NbChamp As Integer, NbRst As Integer
     
        Set maBd = CurrentDb
        Set rst = maBd.openrecordset("table_produit")
        arrData = rst.GetRows(10)          'nombre max de lignes attendu
     
        NbChamp = UBound(arrData, 1)    ' nb de champs
        NbRst = UBound(arrData, 2)         ' nb d'enregistrements
     
        Debug.Print "NbChamp: " & NbChamp
        Debug.Print "NbRst: " & NbRst
        For i = 0 To NbChamp
            For j = 0 To NbRst
                sResult = sResult & arrData(i, j) & " ; "
            Next j
        Next i
     
        MsgBox "sResult: " & sResult
        Debug.Print "sResult: " & vbCr & sResult
    PS : je vous laisse calculer les sommes

  13. #13
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    merci beaucoup
    je m'y remet des aujourd'hui

  14. #14
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Citation Envoyé par guyom_
    je veux combiner le prix, la quantité,..etc des produits mais que l'on distingue à un endroit le nom de ces produits.

    Merci pour votre aide en tout cas

    C'est pour le moin tordu.

    Je te donne deux sacs de billes multicolores :

    1 avec des billes en verre, l'autre avec des billes en plastique.

    Si je te demande le sac de bille en verre, pas de soucis.

    Maintenant je te demande la couleur de la plus grosse bille de verre. Tu es incapable de me répondre. Pourquoi ? Parce que j'ai groupé les billes par matière et non par couleur ni par taille.

    Tu ne peux pas en une seule requête avoir d'une part la liste des produits et a coté le total des produits. Car d'un coté, tu as dix sacs de produits, de l'autre un seul.


    La solution c'est du VBA

    http://access.developpez.com/sources...QLLigneColonne

    C'est un peu plus complexe que la solution de strontium mais plus portable et plus propre.

    Quant à la solution de micniv, elle est dangereuse car le nombre de produit évoluera (enfin, il vaut mieux pour la société)

    Si qq'un sait comment créer une fonction d'aggrégat en Jet SQL (VBA) je suis preneur
    Ce n'est pas possible.

  15. #15
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    Merci tofalu !

    Je vais devoir me mettre au vb alors s'il n'existe pas d'autres possiblitées !


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

Discussions similaires

  1. Opération sur chaînes de caractères
    Par zilis dans le forum Débuter avec Java
    Réponses: 16
    Dernier message: 20/08/2012, 18h20
  2. Opération sur chaînes de caractères
    Par Allan007 dans le forum VB.NET
    Réponses: 6
    Dernier message: 19/01/2012, 10h16
  3. Requête sur chaîne de caractère
    Par ALLODREN dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/07/2009, 15h03
  4. [Requête] Recherche sur chaîne de caractères
    Par kryss_63 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 13/07/2007, 19h48
  5. [Tableaux] Opération sur chaîne de caractères
    Par kespy13 dans le forum Langage
    Réponses: 3
    Dernier message: 19/04/2006, 14h32

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