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

Développement SQL Server Discussion :

Extraire le prix d'un bon d'achat par rapport a un train (Aller/Retour) [2005]


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur PLSQL / SQL SERVER
    Inscrit en
    Décembre 2010
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur PLSQL / SQL SERVER

    Informations forums :
    Inscription : Décembre 2010
    Messages : 138
    Par défaut Extraire le prix d'un bon d'achat par rapport a un train (Aller/Retour)
    Hello,

    ma requete fonctionne bien mais quand j'ai ajouté un champ 'FlightNumber', j'ai eu des doublons.

    pour info : le prix du bon d'achat 'Amount' de la table VoucherTransaction n'a aucun lien avec le 'FlightNumber' de la table PassengerJourneySegment.

    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
    25
    26
    27
    28
    SELECT  DISTINCT 'VO' + V.VoucherReference as [VoucherReference]
    		,pjs.FlightNumber
    		,case when FlightNumber in (500,...) then 'Sud-Est'
    		     when FlightNumber in (410,...) then 'Nord'
    		     when FlightNumber in (333,...) then 'Atlantique'
    		     else null
    		 end AXE
    		,VB.VoucherBasisCode
    		,VB.Name
    		,convert(char(10),V.CreatedDate,103) as DateCreation
    		,convert(char(10),V.Expiration,103) as DateExpiration
    		,convert(char(10),P.CreatedDate,103) as DateUtilisation
    		,VT.RecordLocator 
    		,case V.Status
    			when 1 then 'xxxxx'
    		end as Statut
    		,VT.Amount
    FROM Payment P
    	 join Booking B on P.ReferenceID = B.BookingId
    	 join BookingPassenger BP  on B.BookingID = BP.BookingID
    	 join PassengerJourneySegment PJS  on PJS.PassengerID = BP.PassengerID
    	 join VoucherTransaction VT on P.PaymentID = VT.PaymentID
    	 join Voucher V on VT.VoucherID = V.VoucherID and V.Status = 1
    	 join VoucherIssuance VI on V.VoucherIssuanceID = VI.VoucherIssuanceID
    	 join VoucherBasis VB on VI.VoucherBasisCode = VB.VoucherBasisCode
    WHERE B.Status in (2,3)
    		and P.PaymentMethodCode = 'VO'
    		and b.RecordLocator = 'E5BI9M'
    Result :

    VoucherReference FlightNumber AXE VoucherBasisCode Name DateCreation DateExpiration DateUtilisation RecordLocator Statut Amount
    VO0001 500 Sud-Est GC Geste commercial 01/01/2012 01/01/2013 25/05/2012 E5BI9M xxxxx 10,00
    VO0002 501 Sud-Est GC Geste commercial 01/01/2012 01/01/2013 25/05/2012 E5BI9M xxxxx 10,00
    Ce résultat est faut parce que je dois avoir 10 euros soit pour l'aller (500) soit pour le retour (501) (le voyageur a payé que 10 euros en bon d'achat).
    Avez vous une idée pour améliorer cette requete svp?

    Merci

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 603
    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 : 10 603
    Billets dans le blog
    10
    Par défaut
    En ce cas il faut une information (dans la table VoucherTransaction) qui permette d'identifier à quel trajet, aller ou retour, est associé le paiement

    Ensuite, il faut faire une jointure "left outer join" pour que l'absence de paiement sur l'un des 2 trajets ne soit pas gênante (en utilisant cette information dans le critère de jointure)
    Pour vos autres jointures, je préfère coder explicitement "inner join" plutôt que "join" seul, pour lever toute équivoque

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur PLSQL / SQL SERVER
    Inscrit en
    Décembre 2010
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur PLSQL / SQL SERVER

    Informations forums :
    Inscription : Décembre 2010
    Messages : 138
    Par défaut
    Merci escartefique pour ta réponse

    Citation Envoyé par escartefigue Voir le message
    En ce cas il faut une information (dans la table VoucherTransaction) qui permette d'identifier à quel trajet, aller ou retour, est associé le paiement
    Malheureusement non pas d'information qui permette d'identifier à quel trajet est associé le paiement


    Ensuite, il faut faire une jointure "left outer join" pour que l'absence de paiement sur l'un des 2 trajets ne soit pas gênante (en utilisant cette information dans le critère de jointure)
    Pour vos autres jointures, je préfère coder explicitement "inner join" plutôt que "join" seul, pour lever toute équivoque
    Le "left outer join" ne marche pas je l'ai deja testé !.
    et pour le "inner" c'est un mot clé optionnel pour la "jointure internet" c'est pour ça je le code comme ça, mais c'est juste une préférence

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 603
    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 : 10 603
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par Kisty10 Voir le message
    Ce résultat est faut parce que je dois avoir 10 euros soit pour l'aller (500) soit pour le retour (501) (le voyageur a payé que 10 euros en bon d'achat).
    Citation Envoyé par Kisty10 Voir le message
    Malheureusement non pas d'information qui permette d'identifier à quel trajet est associé le paiement
    Ces 2 affirmations ne vont pas ensemble :
    - soit il existe une information dans la base de données qui permet d'identifier à quel trajet associer le paiement, et il faut utiliser cette information (peut être est elle ailleurs que dans la table paiement)
    - soit l'info n'est pas dans la base, auquel cas la requete n'est pas fausse, c'est le modèle de données qui est incomplet, la requete ne pouvant restituer qu'en fonction des infos de la base


    Citation Envoyé par Kisty10 Voir le message
    Le "left outer join" ne marche pas je l'ai deja testé !.
    Que voulez vous dire par "ça ne marche pas" ? quelle était votre requête et quel résultat avez vous obtenu ?

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur PLSQL / SQL SERVER
    Inscrit en
    Décembre 2010
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur PLSQL / SQL SERVER

    Informations forums :
    Inscription : Décembre 2010
    Messages : 138
    Par défaut
    Je viens d'apprendre que fonctionnellement le paiement est lié avec le recordlocator (le booking) et pas le trajet du coup c'est impossible d'avoir cette information.

    Il me reste une solution c'est les tables temporaires malgré que je ne suis pas fan ^^

    Pour le "left outer join" j'ai le meme resultat, c'est normal et ça confirme ce que je disais auparavant (pas de relation entre paiement et trajet).

    Merci pour ton aide, le sujet est clos pour moi

  6. #6
    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
    Par défaut
    Bonjour,

    Puisque le paiement n'est pas associé a un trajet en particulier, quel résultat attendez vous ?

    - 10 euros pour l'un des deux trajets (et dans ce cas, lequel ?)
    - 5 euros par trajet
    - autre chose

    bref, c'est plus un problème fonctionnel que SQL

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

Discussions similaires

  1. enfroit d'edition d'un état (bon commande achat) sage X3
    Par helmiandrouu dans le forum SAGE
    Réponses: 0
    Dernier message: 04/03/2013, 10h16
  2. [XL-2003] Extraire des données en fonction d'un jour par rapport à la colonne date
    Par fanfan89 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/08/2010, 16h14
  3. obtenir le dernier prix d'achat par fournisseur et par produit
    Par lidybekham07 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 16/11/2009, 16h26
  4. Réponses: 0
    Dernier message: 22/03/2009, 11h36
  5. cas d'utilisation pour un achat par panier
    Par adlich dans le forum Cas d'utilisation
    Réponses: 1
    Dernier message: 26/07/2007, 00h30

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