1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2018
    Messages : 3
    Points : 1
    Points
    1

    Par défaut Comparer les lignes d'une base sql

    Bonjour,


    Je dispose d'une base de donnée sql avec comme variables :

    - idclient_do (correspond a l'identifiant du client)

    - jour (renvoie le jour de la commande)

    - le détail des articles acheté (Renvoi tous les codes des articles achetés par jour et par client,
    exemple d'une ligne : 1006,1038,1099,19124,42368,39063,65157)

    - le nombre d'article acheté

    ce que je voudrais c'est de voir si un client à passer plusieurs fois la même commande dans l'année.

    Merci d'avance et bonne journée.

    Bien cordialement,

    Ali

  2. #2
    Modérateur
    Avatar de gangsoleil
    Profil pro
    R&D en systemes informatiques bas niveau Unix/Linux
    Inscrit en
    mai 2004
    Messages
    9 394
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : R&D en systemes informatiques bas niveau Unix/Linux

    Informations forums :
    Inscription : mai 2004
    Messages : 9 394
    Points : 27 260
    Points
    27 260

    Par défaut

    Bonjour,

    Quel est ton soucis :
    - la requête (l'algo, qu'est-ce qu'il faut comparer, ...)
    - la traduction en SQL
    - autre
    Modérateur "C", "Informatique Générale & Hardware" et "Unix"
    Les règles du forum

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2018
    Messages : 3
    Points : 1
    Points
    1

    Par défaut

    En faite je veux essayer de déterminer pour chaque client s'il a passer plusieurs fois la même commande au cours d'une année.

    Un exemple : le client 15300 achète le 2011-01-01 les articles 134,8765,4362

    Ce que je voudrais c'est donc de déterminer si le client 15300 a passé la même commande un autre jour de l'année 2011

  4. #4
    Expert éminent

    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : mars 2010
    Messages : 3 449
    Points : 7 691
    Points
    7 691
    Billets dans le blog
    1

    Par défaut

    C'est tout à fait possible et c'est même très simple, sous réserve que ce que vous mentionnez ci-dessous :
    Citation Envoyé par ali3529 Voir le message
    - le détail des articles acheté (Renvoi tous les codes des articles achetés par jour et par client,
    exemple d'une ligne : 1006,1038,1099,19124,42368,39063,65157)
    Se traduit par plusieurs occurrences de code articles et de quantités correspondantes dans une table dédiée, et non pas (et surout pas!) par une liste de code articles dans un attribut unique !

    Communiquez la description de vos tables (ordres create table) pour en avoir le cœur net.

  5. #5
    Rédacteur
    Avatar de SQLpro
    Homme Profil pro
    Expert SGBDR & SQL, spécialiste Microsoft SQL Server
    Inscrit en
    mai 2002
    Messages
    17 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert SGBDR & SQL, spécialiste Microsoft SQL Server
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 17 753
    Points : 41 430
    Points
    41 430
    Billets dans le blog
    1

    Par défaut

    Il faut comparer les commandes avec client identique et n° différent puis faire une comparaison ensembliste sur les détail des commandes.

    merci de respecter la charte de postage la prochaine fois... => https://www.developpez.net/forums/a6...gage-sql-lire/

    tables test :
    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
    CREATE TABLE CLIENT 
    (CLI_ID           INT PRIMARY KEY,
     CLI_NOM          VARCHAR(60));
     
    CREATE TABLE PRODUIT
    (PRD_ID           INT PRIMARY KEY,
     PRD_NOM          VARCHAR(60));
     
    CREATE TABLE COMMANDE
    (CMD_ID           INT PRIMARY KEY,
     CLI_ID           INT FOREIGN KEY REFERENCES CLIENT (CLI_ID),
     CMD_DATE         DATE NOT NULL);
     
    CREATE TABLE COMMANDE_DETAIL
    (CDD_ID           INT PRIMARY KEY,
     CMD_ID           INT NOT NULL FOREIGN KEY REFERENCES COMMANDE (CMD_ID),
     PRD_ID           INT NOT NULL FOREIGN KEY REFERENCES PRODUIT (PRD_ID),
     CDD_QUANTITE     FLOAT NOT NULL DEFAULT 1);
    Données tests :
    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
    INSERT INTO CLIENT 
    VALUES (1, 'Claude'), (2, 'Camille'), (3, 'Corinne'), (4, 'Céline'), (5, 'Charles');
     
    INSERT INTO PRODUIT 
    VALUES (11, 'Pastèque'), (22, 'Potiron'), (33, 'Poivron'), (44, 'Paprika'), (55, 'Poire'), (66, 'Pamplemousse');
     
    INSERT INTO COMMANDE 
    VALUES (101, 1, '2017-01-01'), --> une seule facture pour le client 1
           (201, 2, '2017-02-01'), (202, 2, '2017-02-01'), 
           (301, 3, '2017-03-01'), (302, 3, '2017-03-02'), (303, 3, '2017-03-03'), 
           (401, 4, '2017-04-01'), (402, 4, '2017-04-02'),
           (501, 5, '2017-05-01');
     
    INSERT INTO COMMANDE_DETAIL 
    VALUES (1101, 101, 11, 1), --> un seul produit pour la seule facture du client 1
           (2201, 201, 22, 1), (2202, 201, 33, 1), -- 2 produits pour la facture 1 du client 2
           (2203, 202, 44, 1), --> un seul produit pour la facture 2 du client 1
           (3301, 301, 11, 1), (3302, 301, 22, 1), -->  2 produits pour la facture 1 du client 3
           (3303, 302, 11, 1), (3304, 302, 22, 1), -->  2 produits pour la facture 2 du client 3 (identique à la précédente)
           (3305, 303, 11, 1), -->  1 produit pour la facture 3 du client 3
           (4401, 401, 55, 1), -->  1 produit pour la facture 1 du client 4
           (4402, 402, 55, 1); -->  1 produit pour la facture 1 du client 4 (identique à la précédente)
    la comparaison basique :
    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
    SELECT DISTINCT C1.CLI_ID
    FROM   COMMANDE AS C1
           JOIN COMMANDE AS C2
                ON C1.CLI_ID = C2.CLI_ID AND C1.CMD_ID > C2.CMD_ID
    WHERE  NOT EXISTS(SELECT PRD_ID, CDD_QUANTITE
                      FROM   COMMANDE_DETAIL AS CD1
                      WHERE  CD1.CMD_ID = C1.CMD_ID
                      EXCEPT
                      SELECT PRD_ID, CDD_QUANTITE
                      FROM   COMMANDE_DETAIL AS CD2
                      WHERE  CD2.CMD_ID = C2.CMD_ID
                      UNION ALL
                      SELECT PRD_ID, CDD_QUANTITE
                      FROM   COMMANDE_DETAIL AS CD3
                      WHERE  CD3.CMD_ID = C2.CMD_ID
                      EXCEPT
                      SELECT PRD_ID, CDD_QUANTITE
                      FROM   COMMANDE_DETAIL AS CD4
                      WHERE  CD4.CMD_ID = C1.CMD_ID)
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2018
    Messages : 3
    Points : 1
    Points
    1

    Par défaut

    Je vous remercie pour vos retour, au final avec ce code j'arrive à avoir le nombre distinct de commande qu'il passe et donc déduit le nombre de même commande qu'il a passé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select  count(distinct article) as commande_distinct, ma.idclient_do
    from (select idclient_do,
           jour,
           group_concat(article) as article,
           count(*) as nb_produit
    from mutlu.ventes_2011_5
    group by idclient_do, jour) as ma
    group by idclient_do;

    le seul hic je dirai, c'est que, est-ce-que le distinct considère la commande "112,115" de la même manière que "115,112" ?

    Merci encore et bonne journée.

    Ali

  7. #7
    Modérateur

    Profil pro
    Inscrit en
    janvier 2010
    Messages
    4 799
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : janvier 2010
    Messages : 4 799
    Points : 9 795
    Points
    9 795

    Par défaut

    Bonjour,

    si votre base est correctement modélisée, oui, sinon, pas forcément !

    répondez à la question d'Escartefigue : indiquez nous la structure de vos tables, on pourra mieux vous répondre.

  8. #8
    Expert éminent

    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : mars 2010
    Messages : 3 449
    Points : 7 691
    Points
    7 691
    Billets dans le blog
    1

    Par défaut

    Citation Envoyé par ali3529 Voir le message
    Ce que je voudrais c'est de voir si un client à passer plusieurs fois la même commande dans l'année.
    Outre la description des tables qui est manquante, il faut aussi préciser s'il faut considérer ou non la quantité commandée dans la comparaison

    Par exemple, pour un client, j'ai les commandes suivantes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    --- Date ---!--article --!-- Qté --!
     2018-01-05 ! machin     !   10    !
     2018-01-12 ! truc       !   20    !
     2018-01-20 ! truc       !   17    !
     2018-02-05 ! machin     !   10    !
    Si la quantité est à considérer, alors il y a doublon uniquement pour les commandes de l'article "machin", sinon il y a deux doublons

Discussions similaires

  1. Attacher les tables d'une base SQL server 2000
    Par dimitrak dans le forum VBA Access
    Réponses: 1
    Dernier message: 30/03/2008, 16h08
  2. comparer les résultats d'une requete sql
    Par oceane751 dans le forum JDBC
    Réponses: 26
    Dernier message: 05/03/2008, 18h05
  3. Récupérer les lignes d'une procédure SQL Server dans le programme VB.NET
    Par Mikelester12 dans le forum Accès aux données
    Réponses: 2
    Dernier message: 30/07/2007, 11h33
  4. [SQL] Supprimer les lignes d'une table sql
    Par radhwene dans le forum PHP & SGBD
    Réponses: 1
    Dernier message: 28/06/2007, 11h48
  5. Droits sur les vues d'une base SQL server 2000
    Par mioux dans le forum MS SQL-Server
    Réponses: 4
    Dernier message: 30/04/2007, 16h13

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