2013-02-17 4 views
0

Je ne pouvais pas penser à un titre assez bon, mais voici ma question.Comparer les valeurs de deux tables différentes et les multiplier

J'ai quelques tables dans une application qui, entre autres choses, va générer une facture mensuelle pour les consommateurs d'un utilitaire d'alimentation. Plus précisément, il y a trois tables impliquées, 1) Tableau de consommation 2) Historique de facturation Tableau 3) Taux Liste Tableau

Il existe différentes dalles de prix par unités consommées pour différents types de connexions, par exemple une connexion domestique ayant consommé jusqu'à 50 unités par mois serait une facture considérablement plus faible alors une connexion commerciale consommant 50 unités par mois.

La structure est à http://www.sqlfiddle.com/#!3/eeab6

Le champ application_nature dans la table des consommateurs définit quel type de connexion, il est commercial ou domestique.

Le paramètre payment_status de la table billing_history2 stocke une valeur booléenne indiquant si une facture a été payée ou non.

En utilisant cette requête, je génère la consommation totale d'un consommateur et les arriérés le cas échéant.

SELECT BILLING_HISTORY2.CONSUMER_ID, count(reading) AS 'DEFAULT PERIOD', SUM(reading) AS 'Total Reading' from BILLING_HISTORY2 where payment_status=0 GROUP by billing_history2.CONSUMER_ID; 

Ce que je veux ici est de générer 1) une facture mensuelle en fonction des unités consommées depuis la dernière facture payée. 2) Une facture mensuelle basée sur le nombre total d'unités consommées depuis le mois, puis additionnée d'arriérés.

Toutes les suggestions.

Répondre

0

1) Recherche lorsque la dernière facture a été payée. Quelque chose comme:

SELECT FROM BILLING_HISTORY2 where ID = 'CUSTOMERIDHERE' ORDER BY READING_MONTH_YEAR DESC 

2) Prenez la première variable d'date d'enregistrement et de recherche toutes les lectures pour le client qui est venu à compter de cette date (cela suppose les gens paient jusqu'à la charge de la journée en cours). 3) Ensuite, lorsque vous faites défiler chaque enregistrement correspondant aux critères de l'étape 2, ajoutez les charges totales dans des variables. 4) Ensuite, si 'payment_status' indique que la facture précédente n'a pas été payée, répétez les étapes 1 à 3 en vous assurant d'ignorer l'enregistrement de la date du mois précédent (et en obtenant le mois AVANT CETTE). En outre, recherchez uniquement les valeurs dans une plage de dates. Donc, si le projet de loi précédent a débuté le 1er février, votre fourchette du mois précédent devrait être du 1er janvier au mois de janvier. 31. Et si ce projet de loi n'a pas été payé, recherchez des accusations entre le 1er décembre et le mois de décembre. 31. Fondamentalement, vous devez revenir en arrière 1 mois à la fois jusqu'à ce que vous trouviez une facture payée (ou inexistante, n'impliquant aucun service avant cette date) et en ajoutant les valeurs que vous trouvez à un total global.

+0

Création d'une vue sur la VIEW_CUSTOMER_BILL de requête que j'ai posté dans ma question et __SELECT vmctu. [Total lecture], p2.price, vmctu. [Total lecture] * p2.price AS 'Bill' de VIEW_CUSTOMER_BILL vmctu INNER JOIN price_list2 p2 ON vmctu.application_nature = p2.flag AND vmctu. [Lecture totale] ENTRE p2.limit_start ET p2.limit_end __ me donne le Bill avec les arriérés. Cependant, cela prend en compte la somme totale des unités consommées qui n'ont pas été payées – user2018756

+0

La vue que j'ai conçue ne fonctionne pas correctement, car elle ne soustrait pas le montant payé. – user2018756

+0

Ma solution repose uniquement sur SQL pour essentiellement retirer des données du système.Vous voudrez probablement faire vos comparaisons de variables et ajouter/soustraire/multiplier dans n'importe quel langage de programmation que vous utilisez. Il n'y a que peu de choses que vous pouvez [facilement] faire nativement dans une base de données. – scottcarmich

Questions connexes