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 :

SELECT et créer une relation de part la valeur dans des colonnes différentes


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 36
    Points : 20
    Points
    20
    Par défaut SELECT et créer une relation de part la valeur dans des colonnes différentes
    Bonjour,

    J'ai une table de transactions financières pour différents comptes et je cherche à tracer les mouvements de fonds entre comptes.

    La table se présente ainsi:

    account transacDate débit crédit balance
    12345678 24/07/2008 900 NULL 2524.6
    87654321 24/07/2008 NULL 900 5546.1
    87654321 24/07/2008 NULL 100 5446.1

    Je cherche à sortir pour une même journée les opérations pour lesquelles crédit=débit.
    Dans l'exemple ci-dessus les 2 premières lignes, afin de voir le débit du compte 12345678 pour créditer le compte 87654321.

    Alternativement, la requête pourrait me sortir une nouvelle forme à savoir
    transacDate deb_acc credit_acc amount
    24/07/2008 12345678 87654321 900

    J'ai essayé plusieurs requêtes mais pas trouver la bonne, mon self-join ne me retourne pas ce que j'espère.

    Merci.

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour,

    Détaillez un peu plus votre table car là ça n'a pas compréhensible.

    Comment reconnait-on qu'une transaction sur un compte est la même que celle sur un autre compte ?

    quelle est votre requête actuelle ?

  3. #3
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 36
    Points : 20
    Points
    20
    Par défaut
    Détails des champs:
    * "account" c'est tous des numéros de comptes bancaire
    *"transacDate" c'est la date de l'opération
    * "débit" c'est le montant duquel le compte "account" est débité, si ce champ à un montant, le champ crédit est par définition vide.
    * "crédit" c'est le montant duquel le compte "account" est crédité, si ce champ à un montant, le champ débit est par définition vide.
    * "balance", c'est le solde du compte après débit/crédit

    Dans l'exemple donné, il y donc un virement de 900 en date du 24/07/2008 depuis le compte débité 12345678 vers le compte crédité 87654321

    Je me suis trompé pour le solde de la 3ième ligne, cela devrait être
    87654321 24/07/2008 NULL 100 5646.1
    Et on aurait disons une compte débité ainsi
    11111111 24/07/2008 100 NULL 9975.1

    signifiant un virement de 100 en date du 24/07/2008 depuis le compte débité 11111111 vers le compte crédité 87654321

    Sur les milliers d'opérations (versement, intérêt débit carte de crédits, etc), je cherche juste à isoler certains transferts de comptes à compte.

    Requête, la table s'appelle OP_REGU

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DISTINCT [OP_ REGU].*
    FROM [OP_ REGU] INNER JOIN [OP_ REGU] AS [OP_ REGU_1] ON ([OP_ REGU].transacDate = [OP_ REGU_1].transacDate) AND ([OP_ REGU].CREDIT = [OP_ REGU_1].DEB);
    Merci

    P.S. Désolé, mais j'arrive pas à garder les tabulations/espaces dans le post

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Avec ces infos uniquement il n'y aucun moyen de savoir quand 2 transactions sont liées.


    en effet on pourrai très bien avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    54263258 24/07/2008 900 NULL 4567.3
    12345678 24/07/2008 900 NULL 2524.6
    98564321 24/07/2008 NULL 900 4446.1
    87654321 24/07/2008 NULL 900 5546.1
    87654321 24/07/2008 NULL 100 5446.1
    Et dans ce cas comment savoir qui a crédité qui ?

  5. #5
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 36
    Points : 20
    Points
    20
    Par défaut
    Parfaitement bien vu.
    C'est pour l'instant ce dont je dispose comme information, bon j'ai un champ aussi de communication et parfois les communications sont les même pour l'opération d'une part de débit, d'autre par de crédit, parfois elle peuvent être différente par exemple un transfert, suivit d'un retrait cash...

    Je souhaite juste sortir cette liste, faut distinguer unicité des opérations ou tel que votre exemple, non unicité à "élucider".

    La requête fournit déjà une information d'analyse intéressante.

    En fait je vais même avoir un champ pour avoir des dates proches, p.ex. retrait et dépôt distinct de 4 jours.

    Merci

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    La seule qui me vient à l'esprit c'est ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    select a.transacDate, a.amount, 
    max(case when a.debit is not null then a.account end) as deb_acc,
    max(case when b.credit is not null then b.account end) as cred_acc
    from ma_table a
    inner join ma_table b on a.transacDate = b.transacDate and a.debit= b.credit
    group by a.transacDate, a.amount
    having count(*) = 2
    Et vu que vou savez beaucoup de volumétrie cette requête ne devrai pas retourner grand chose.

    Changer le format de votre table de log ca vous simplifira la vie.

Discussions similaires

  1. Réponses: 4
    Dernier message: 22/07/2014, 08h15
  2. Réponses: 2
    Dernier message: 21/01/2013, 16h44
  3. [MCD] Comment créer une relation d'héritage dans Access
    Par Marounda dans le forum Schéma
    Réponses: 4
    Dernier message: 11/01/2008, 16h28
  4. [ACCESS] - créer une relation *.n / *.n
    Par guiguikawa dans le forum Access
    Réponses: 4
    Dernier message: 13/06/2006, 10h08

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