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

Langage SQL Discussion :

Vue complexe avec plus de lignes qu'initialement


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 20
    Points : 27
    Points
    27
    Par défaut Vue complexe avec plus de lignes qu'initialement
    Bonjour à tous,

    Petit problème pour ma création de vue.

    Je dispose d'une table client comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SOCIETE    CLIENT    CENTRALE d'ACHAT
    ---------    ------    -----------------
    999            100001    300001
    999            100002    300001
    999            300001    300001
    Ainsi que d'une table tarif comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SOCIETE    TYPE TIERS    ARTICLE    CODE TIERS     Prix   code tarif  tranche
    ---------    ------            -------    -----------      -----   ------  ------
    999         CLIENT          TOTO        100001         34       A        100
    999         CLIENT          TOTO        300001         36       A        100
    999         CLIENT          TOTO        300001         37       B        200


    Et je souhaite une vue comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SOCIETE    TYPE TIERS    ARTICLE    CODE TIERS     Prix   code tarif  tranche
    ---------    ------            -------    -----------      -----   ------  ------
    999         CLIENT          TOTO       100001         34       A        100
    999         CLIENT          TOTO       100001         37       B        200
    999         CLIENT          TOTO       100002         37       B        200
    999         CLIENT          TOTO        300001        36       A        100
    999         CLIENT          TOTO        300001        37       B        200

    D'avance, merci à vous.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 287
    Points : 12 995
    Points
    12 995
    Par défaut
    Bonjour,
    Si j'ai bien compris, il faut faire une jointure entre les deux tables, tarif.codetires = client.centraleachat, puis afficher les colonnes de la table tarif, sauf le code client de la table client à la place du code tiers de la table tarif.

    C'est bien celà ?

    Tatayo.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 20
    Points : 27
    Points
    27
    Par défaut
    Merci pour la réponse rapide.

    Concrètement :

    j'ai des tarifs spécifiques aux clients ainsi que des tarifs stockés sur les centrales d'achats, les centrales d'achats étant précisées sur les clients.


    Au final, il me faut la liste des tarifs appliqués aux différents clients.

    Pour reprendre l'exemple au-dessus : mon article TOTO est à 36 pour une quantité de 100 sur ma centrale d'achat et 37 pour 200. Mon client a cependant négocié un prix à 34 pour 100.

    Du coup ses tarifs appliqués seront :
    34 pour l'article TOTO avec une quantité à 100. (prix spécifique client pour 100)
    36 pour l'article TOTO avec une quantité à 200. (prix de la centrale pour 200, car pas de tarif négocié)


    Ma vue doit reprendre la liste des tarifs appliqués, client par client, article par article et tranche par tranche.

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Dans votre résultat attendu, est-il normal que vous n'ayez pas :
    999 CLIENT TOTO 100001 36 B 100
    ? si oui, pourquoi

    EDIT : ok, avec votre explication, je comprend mieux, la réponse à ma question est donc : "oui c'est normal car on prend le tarif négocié pour un client s'il y en a, sinon le tarif normal". C'est bien ça ?

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 115
    Points : 28 491
    Points
    28 491
    Par défaut
    Montre nous la requête que tu as déjà faite.
    Nous pourrons t'aider à la corriger.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 20
    Points : 27
    Points
    27
    Par défaut
    Pour l'instant, je parviens tout juste à faire ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE VIEW ZZTARIF(TAKTSOC, TAKTCODE, TAKTCODART, TAKTCOMART, TAKTTARIF, TAKJAPLI, TACNPU, TACNTRANCH, TACTCOMMEN) 
    AS  SELECT  A.TAKTSOC, A.TAKTCODE, A.TAKTCODART, A.TAKTCOMART, A.TAKTTARIF, A.TAKJAPLI, A.TACNPU, A.TACNTRANCH, A.TACTCOMMEN 
        FROM    TARIF A 
        WHERE   TAKTGENRE=¿2¿
    qui me donne une vue sur les tarifs particuliers....

    je bloque complètement sur la génération des lignes de vue à partir du code centrale d'achat


    je présume bien qu'il y'a au moins la requête que j'ai écrite liée avec un UNION à une autre requête mais c'est tout...

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 20
    Points : 27
    Points
    27
    Par défaut
    Je me permets de upper le topic... Je n'ai pas forcément besoin d'une réponse complète, même une piste ce serait formidable.

  8. #8
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Votre demande n'est pas claire, et je ne vois pas du tout comment vous passez de vos données initiales à votre résultat...

    Pourquoi n'avez-vous pas la ligne suivante dans votre résultat ?


    999 CLIENT TOTO 100002 36 A 100

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 20
    Points : 27
    Points
    27
    Par défaut
    aieeeuuuuu, merci de votre intérêt pour ce sujet mais il me semble que vous aviez déjà posé cette question et que vous aviez trouvé pourquoi d'ailleurs

    EDIT : ok, avec votre explication, je comprend mieux, la réponse à ma question est donc : "oui c'est normal car on prend le tarif négocié pour un client s'il y en a, sinon le tarif normal". C'est bien ça ?

    Concrètement, l'idée c'est de générer pour chaque client des lignes correspondant au tarif de la centrale d'achat correspondant... Après pour refaire des tests d'existence, je me débrouillerai en bidouillant des vues sur des vues, etc..

    donc si j'ai 100 clients sur une centrale d'achat avec 12 tarifs, je souhaite obtenir 1200 lignes dans ma vue. Voilà tout mon soucis....

  10. #10
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    bonjour,

    Non, c'était certes une question similaire, mais néanmoins différente :
    999 CLIENT TOTO 100001 36 B 100
    999 CLIENT TOTO 100002 36 A 100
    Ici, je ne comprends pas pourquoi votre client 10002 n'a qu'une seule ligne dans le résultat.

    donc si j'ai 100 clients sur une centrale d'achat avec 12 tarifs, je souhaite obtenir 1200 lignes dans ma vue. Voilà tout mon soucis....
    Dans votre exemple, vous avez 3 clients, 3 tarifs... et 5 lignes dans le résultat.

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 20
    Points : 27
    Points
    27
    Par défaut
    Dans votre exemple, vous avez 3 clients, 3 tarifs... et 5 lignes dans le résultat.

    Oui, dans mon exemple, c'est le résultat que je souhaite au final... mais si je parviens déjà à avoir une ligne par couple client-tarif centrale d'achat, je peux me débrouiller par la suite avec un (not) Exists.

    Toute la difficulté se trouve dans la génération d'une vue avec une ligne par coupe client-tarif centrale d'achat.



    999 CLIENT TOTO 100002 36 A 100

    Mea maxima culpa, elle aurait du s'y trouver et j'aurais du relire mon post de l'époque...

  12. #12
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par Dostix2 Voir le message
    elle aurait du s'y trouver
    Alors, peut-être quelque chose dans ce style :

    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
     
    SELECT
    	c.Societe,
    	Centrale.TypeTiers,
    	Centrale.Article,
    	Centrale.CodeTiers,
    	COALESCE(Specifique.Prix, Centrale.Prix) AS Prix,
    	Centrale.CodeTarif,
    	Centrale.Tranche
    FROM	Client AS c
    INNER JOIN Tarif AS Centrale
    	ON	Centrale.CodeTiers = c.CentraleDAchat
    LEFT JOIN	Tarif AS Specifique
    	ON		Specifique.CodeTiers = c.Client
    	AND		Specifique.Article = Centrale.Article
    	AND		Specifique.CodeTarif = Centrale.CodeTarif
    	AND		Specifique.Tranche = Centrale.Tranche
    Cette requête suppose que tous les prix sont renseignés pour tous les articles pour toutes les tranches.
    Elle sera sûrement à adapter, car je n'ai toujours pas tout compris.
    D'ailleurs pourquoi le Type Tiers est-il "Client" dans ces deux lignes :
    999 CLIENT TOTO 300001 36 A 100
    999 CLIENT TOTO 300001 37 B 200
    Ne s'agit-il pas de votre centrale d'achat ?

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 20
    Points : 27
    Points
    27
    Par défaut
    Après quelques modifs du code et le découpage en plusieurs vues pour bien détailler ce que je faisais, cela fonctionne nickel.


    Un grand merci, aieeeuuuuu

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

Discussions similaires

  1. Requête complexe avec plusieurs lignes par table
    Par Iwazaru dans le forum Requêtes
    Réponses: 5
    Dernier message: 01/09/2009, 10h46
  2. Ouvrir un fichier csv avec plus de 65535 lignes
    Par mustang-ffw02 dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 09/10/2007, 21h46
  3. Réponses: 4
    Dernier message: 25/07/2007, 11h29
  4. Dessiner des objets plus complexes avec OpenGL
    Par Premium dans le forum OpenGL
    Réponses: 18
    Dernier message: 21/11/2006, 18h55
  5. un Excel avec plus de lignes, cela existe il ?
    Par petitours dans le forum Excel
    Réponses: 11
    Dernier message: 30/05/2006, 18h47

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