2010-03-20 6 views
2

je la structure de tableau suivant (très simplifié):Django sélectionnez somme distincte

Order: 
    order_number = CharField 
    order_invoice_number = CharField 
    order_invoice_value = CharField 

Un numéro de facture peut être identique à plus d'un ordre (ordre O1 a le numéro de facture I1, pour O2 a le numéro de facture I1 , etc.). Toutes les commandes avec le même numéro de facture ont la même valeur de facture.

Par exemple:

Order no. Invoice no. Value 
O1   I1    200 
O2   I1    200 
O3   I1    200 
04   I2    50 
05   I3    100 

Ce que je suis en train de faire est de faire une somme sur toutes les valeurs de la facture, mais ne pas ajouter les factures avec le même numéro plus d'une fois. La somme pour les éléments ci-dessus serait: 200 + 50 + 100.

J'ai essayé de faire cela en utilisant

s = orders.values('order_invoice_id').annotate(total=Sum('order_invoice_value')).order_by() 

et

s = orders.values('order_invoice_id').order_by().annotate(total=Sum('order_invoice_value')) 

mais je n'ai pas le résultat souhaité. J'ai essayé quelques solutions différentes à partir de questions similaires ici mais je n'ai pas pu obtenir le résultat souhaité.

Je n'arrive pas à comprendre ce que je fais de mal et ce que je dois réellement faire pour obtenir une somme qui utilise chaque valeur de facture une seule fois.

Edit:

Je viens de réaliser que je l'ai écrit à O5 I2 au lieu de I3. C'est écrit correctement maintenant.

Le résultat souhaité pour les données ci-dessus est la somme de la valeur de chaque facture, utilisée une seule fois. Somme = I1 + I2 + I3 = 200 + 50 + 100 = 350

+0

Veuillez ajouter vos résultats attendus ou désirés. Par exemple: I1 total = 600, I2 total = 150. – istruble

+0

J'ai édité ma question et ajouté le résultat désiré et j'ai également trouvé une erreur dans les données que j'ai écrites. – yoshi

Répondre

1

Je dirais que la structure de votre modèle est erronée. Vous devriez avoir une table pour Order, contenant le numéro de commande et la valeur, et une table séparée pour les factures, avec une clé étrangère de la facture à l'ordre. Alors votre requête serait simple.

Questions connexes