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) â ââââââââââââââ©âââââââââââââââ©ââââââââââ©ââââââââââââââââââââââââââââââââââââ
5 Réponses :
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;
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 code> est sur a.customéride code> ou a.tocustoméride code> 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 code>)
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" i> sans explication dans votre question i> 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.
J'ai supprimé TOCUSTOMERID dans Colname. Si vous l'ajoutez que la somme 2 fois
Mais je dois avoir un identifiant ToCustomer. Il faut parce que je veux calculer la même quantité pour "tocustoméride"
Je pense que votre réponse devrait être comme celle-ci ... sortie: strong> p>
Non, ce n'est pas correct résultat ce que je voulais. Votre requête ne fait pas référence à "tocustoméride" dans Tablea. Voir ma question mise à jour pour plus de compréhension
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
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.
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
Des échantillons de données dans une table Table de texte i> 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 Code>. Vous prenez le montantcode> 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