Bonjour à tous,
J'ai un soucis pour résoudre un problème qui se pose dans les données de l'application bancaire sur la quelle je travaille.
Je vous explique le principe :
Nous proposons des services d'assurances que voici :
:Assurance Obsèques, Assurance Obsèque +, Soutra famille semestriel, Soutra famille annuel, Adhesion soutra famille
Et ces différents services d'assurance sont dans la table suivante :
CodeService Montant Description 645 5000 Assurance Obsèque 647 10000 Assurance Obsèque+ 681 6000 Soutra famille semestriel 682 12000 Soutra famille annuel 683 1000 Adhesion soutra famille
Je prends des exemples de clients qui sont dans la table suivantes :
CodeClt Nom Prenoms 0001 Dupond Yannick 0002 Yacinthe Albert 0003 Le Boeuf François 0004 Kapersky Annick
les clients ont un compte qui se trouve dans une table que voici :
NumCompte Date Creation CodeClt TypeCompte Solde 11111 01/01/2013 0001 DP 6000 11112 01/05/2013 0003 DP 6000 11113 01/10/2013 0004 DP 6000
Et lorsque le client souscrit à un de ces services, ces souscriptions s'enregistrent dans la table des transactions
ID Date NumCompte Montant CodeService 1 01/02/2013 11111 5000 645 2 02/06/2013 11112 5000 645 3 01/12/13 11113 5000 645 4 01/02/2014 11111 2000 645 5 01/03/2014 11111 3000 645 6 02/06/2014 11112 4000 645 7 02/07/2014 11112 1000 645 8 01/12/14 11113 5000 645
Donc comme vous pouvez le constater, l'adhésion au service 645 est coute au client 5000 et le renouvellement se fait aussi toujours le jour d'anniversaire de la l'adhésion, mais le prélèvement du montant (5000) doit se faire automatiquement tant qu'il ya de l'argent sur le compte du client.
Or le système bancaire sur lequel nous travaillons ne prélève pas forcement les 5000 sur le compte de l'utilisateur si le solde de son compte n'atteint pas les 5000.
Exemple :
Le 18 /01/2015, Monsieur Yao AMANI décide de souscrit au service Soutra (645) et fait un dépôt initial de 100000 Francs sur son compte de dépôt.
Le 18/01/2016 Monsieur Yao AMANI a un montant de 3000 Francs sur son compte et le prélèvement automatique doit se fait pour le service au quel il a souscrit.
Alors le logiciel bancaire dans ce cas ne prélève pas automatiquement les 5000 mais prélève les 3000 francs.
Le 01/02/2016 Monsieur Yao fait un dépôt de 50000 Francs sur son compte. Alors le logiciel vient prélever les 2000 francs restant.
Le problème est qu'on me demande de faire une requête qui va le nombre de client qui on fait un renouvellement.
Or lorsque le logiciel prélève les 5000 lors du renouvellement il y a pas de problème mais lorsqu'il prélève soit 3000 et ensuite 2000 comme mentionné plus haut, là je ne sais plus comment procéder vu qu'il y aura 2 enregistrements passé à des dates de mois différents.
Voici le code que j'ai eu a écris :
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 select br.short_name 'Agence' , da.rim_no 'Rim' ,rm.first_name +' '+rm.last_name 'Nom et Prénom(s) client ' , dh.acct_no 'Numero compte' , convert (char (10),rm.birth_dt, 103) 'Date de Naissance' , convert (char (10),dh.create_dt, 103) 'Date adhésion' , '500 000' 'Montant Capital' , dh.amt 'Montant Prime annuelle' /*, dh.description 'Champ libellé' ,case when dh.reversal=0 then 'Non' when dh.reversal=1 then 'Oui' end ' Contrepassé'*/ from dp_history dh, dp_acct da, ad_gb_branch br, rm_acct rm where dh.acct_no=da.acct_no and dh.orig_branch_no=br.branch_no and rm.rim_no=da.rim_no and dh.tran_code in (645) and dh.reversal=0 and dh.amt>0 and br.branch_no=140 /*<:and:dh.create_dt:1> <:and:br.branch_no:2> <:and:da.rim_no:3> <:and:dh.acct_no:4> <:and:dh.tran_code:5>*/ --and year(dh.create_dt)=2016 and dh.create_dt<'20160801' and da.rim_no in (select da.rim_no from dp_history dh, dp_acct da, ad_gb_branch br, rm_acct rm where dh.acct_no=da.acct_no and dh.orig_branch_no=br.branch_no and rm.rim_no=da.rim_no and dh.tran_code in (645) and dh.reversal=0 and dh.amt>0 and br.branch_no=140 /*<:and:dh.create_dt:1> <:and:br.branch_no:2> <:and:da.rim_no:3> <:and:dh.acct_no:4> <:and:dh.tran_code:5>*/ --and year(dh.create_dt)=2014 and dh.create_dt between '20160801' and '20160831' --and sum(dh.amt)=5000 ) order by br.short_name, rm.first_name +' '+rm.last_name
NB: les noms des colonnes de la requête sont celles de la vraie base et pour être plus compréhensible, j'ai utilisé un schéma d'exemple plus haut
Comment dois-je procéder?
Partager