Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/12/2011, 09h25   #1
Invité de passage
 
Femme
Inscription : décembre 2011
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : Belgique

Informations forums :
Inscription : décembre 2011
Messages : 9
Points : 0
Points : 0
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.
livebe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2011, 09h30   #2
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 647
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 647
Points : 2 644
Points : 2 644
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 ?
punkoff est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2011, 12h06   #3
Invité de passage
 
Femme
Inscription : décembre 2011
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : Belgique

Informations forums :
Inscription : décembre 2011
Messages : 9
Points : 0
Points : 0
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 :
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
livebe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2011, 13h02   #4
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 647
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 647
Points : 2 644
Points : 2 644
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 :
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 ?
punkoff est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2011, 13h45   #5
Invité de passage
 
Femme
Inscription : décembre 2011
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : Belgique

Informations forums :
Inscription : décembre 2011
Messages : 9
Points : 0
Points : 0
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
livebe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2011, 14h57   #6
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 647
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 647
Points : 2 644
Points : 2 644
La seule qui me vient à l'esprit c'est ceci :

Code :
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.
punkoff est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h04.


 
 
 
 
Partenaires

Hébergement Web