0
votes

Impublard, rejoindre et somme

Voici la structure de la table et la requête que je suis en cours d'exécution. Il ne jette pas la bonne somme.

╔════════════╦══════════════╦═════════╦═══════════════════════════════════╗
â•‘ CustomerID â•‘ CustomerName â•‘ Amount  â•‘ Calculation = (TableA) + Table(B) â•‘
╠════════════╬══════════════╬═════════╬═══════════════════════════════════╣
â•‘          1 â•‘ AAA          â•‘ $2,430  â•‘ ($500+$100)+($1680+$150)          â•‘
â•‘          2 â•‘ BBB          â•‘ $1,200  â•‘ ($300+$900)+($0)                  â•‘
â•‘          3 â•‘ CCC          â•‘ $1,300  â•‘ ($900)+($400)                     â•‘
â•‘          4 â•‘ DDD          â•‘ $0      â•‘ $0 + $0                           â•‘
â•‘          5 â•‘ EEE          â•‘ $820    â•‘ ($300+$100)+($420)                â•‘
╚════════════╩══════════════╩═════════╩═══════════════════════════════════╝


4 commentaires

Des échantillons de données dans une table Table de texte et une explication de la logique aiderait. Le code non de travail ne fournit pas nécessairement beaucoup d'informations.


J'ai mis à jour ma question


Tablea dit FromCustoméride . Vous prenez le montant et ajoutez-le? Mais l'argent va à un autre identifiant client, oui? Par exemple, CustomerID 1 envoie 500 $ à CustomerID 10. Cela ne signifie pas que CustomerID 1 a 500 $ ... CustomerID 10 a maintenant 500 $.


Oui, mais j'ai besoin d'un montant total de transaction effectué par Persona, peu importe s'il reçut ou envoyé. Il suffit de faire au total pour toute la transaction personnalisée faite


5 Réponses :


0
votes

Je ne sais pas pourquoi vous utilisez imputile code> du tout. Juste quelques rejoindre code> s Vous obtenez les résultats que vous semblez être suivants:

SELECT M.customerid,
       M.customername,
       --SUM(B.amount)
       SUM(B.amount) AS amount
FROM @tabM M
     LEFT JOIN @tabA A ON M.customerid = A.customerid
     LEFT JOIN @tabB B ON A.customerid = B.customerid
GROUP BY M.customerid,
       M.customername;


6 commentaires

Si vous le voyez, Tabb dispose de deux colonnes contenant des identités client (B.Customérid et to.customéride) et j'ai besoin de les diviser. C'est pourquoi j'utilise impulsion


Mais dès que votre rejoindre est sur a.customéride ou a.tocustoméride vous obtenez les mauvais résultats. Ce qui précède obtient les bons résultats. Je pense que nous avons besoin de vous pour expliquer votre logique et à résoudre plus d'exemples (et ne retournez pas null )


Persona 100 $ Personneb, je dois considérer que 100 $ pour la personne (A & B), ma tableb a deux colonnes avec CustomerID et la colonne de quantité est commune entre elles. J'ai besoin d'avoir personna = 100 $, personneB = 100 $


Comme je l'ai dit, @ user1041627 " Je pense que nous avons besoin que vous ayez besoin de vous pour expliquer votre logique, et à résoudre plus d'exemples" sans explication dans votre question et l'ensemble de résultats complet, nous avons Aucune chance de vous aider ici autre que deviner.


Je ne sais pas ce que de plus à expliquer, vérifiez ce lien pourquoi j'ai besoin d'utiliser impulsion. Stackoverflow.com/questions/57439167/...


Vous n'avez rien expliqué dans votre question cependant, @ user1041627. Certains SQL et les mauvais résultats, puis les résultats corrects incomplets ne sont pas une explication. Nous ne connaissons pas vos données ou vos objectifs; Vous devez expliquer vos besoins comme si vous l'expliquez à un tout étranger, sans aucune connaissance de votre système, de vos données ou de vos exigences. Pourquoi? Parce que c'est exactement ce que nous sommes.



0
votes

J'ai supprimé TOCUSTOMERID dans Colname. Si vous l'ajoutez que la somme 2 fois xxx


1 commentaires

Mais je dois avoir un identifiant ToCustomer. Il faut parce que je veux calculer la même quantité pour "tocustoméride"




0
votes

Certaines de votre Vale sont doublées car dans le tableau B, vous avez plusieurs entrées pour un même client. Vous devez calculer d'abord la somme de la table de chaque client avant d'établir les jointures. Vous pouvez vérifier cela ci-dessous une option alternative de script-

customerid  customername    Amount
1           AAA             2430
2           BBB             1200
3           CCC             1300
4           DDD             0
5           EEE             820


2 commentaires

Oui, celui-ci fonctionne. J'ai déjà essayé de même, mais j'ai abandonné l'idée d'avoir des jointures avec une requête sélectionnée. JOIN DE GAUCHE (SELECT SELECT .....) Avoir des coûts élevés Comparez-vous à gauche (Nom de la table). J'ai des millions d'enregistrements dans chaque 3 tables, alors je me demandais si je trouve un moyen d'utiliser une instruction "Sélectionner" après chaque jointure gauche. Je suis d'accord avec votre logique mais que les possibilités d'expulsion ont moins de coût.


@ user1041627 Veuillez vérifier l'option alternative que j'ai ajoutée dans la réponse. Pas sûr que la performance sage Ce sera mieux ou non, mais j'ai trouvé que celles-ci sont la seule option 2 pour obtenir votre sortie souhaitée.



0
votes

J'espère que cela fonctionne pour vous:

select m.CustomerID, m.CustomerName, m.total2 + isnull(sum(a2.amount), 0.0) as total3
from
(
select m.CustomerID, m.CustomerName, m.total1 + isnull(sum(a1.amount), 0.0) as total2
from
(
select m.CustomerID, m.CustomerName, isnull(sum(b.amount), 0.0) as total1
from TableM m
left join TableB b on m.CustomerID = b.CustomerID
group by m.CustomerID, m.CustomerName
) as m
left join TableA a1 on m.CustomerID = a1.FromCustomerID
group by m.CustomerID, m.CustomerName, m.total1
) as m
left join TableA a2 on m.CustomerID = a2.ToCustomerID
group by m.CustomerID, m.CustomerName, m.total2


0 commentaires