2017-10-20 12 views
1

Je lance une requête pour extraire les données de notre système et les comparer à une table distincte des factures, qui fonctionne. Cependant, maintenant je dois tirer seulement cette somme (volumnece) seulement pour les factures plus grandes que la date entrée dans notre système.Sous-requête SQL dans la sélection de la même table

Voici ma question:

SELECT 
MIN(c.created_at) AS date, 
c.meta_account_Id, 
c.organization_Id, 
c.user_id, 
c.meta_distributorId, 
c.meta_accountName, 
CASE 
    WHEN sum(s.volumece) IS NULL THEN 0 
    ELSE sum(s.volumece) 
END AS ces 
FROM [commitments] c 
LEFT JOIN [Sales2] s ON c.organization_Id=s.org_id AND 
c.meta_account_Id=s.account_id 
WHERE c.status='active' 
GROUP BY c.meta_account_Id, c.organization_Id, c.user_id, 
c.meta_distributorId, c.meta_accountName 

Voici ce que je pense que ça devrait ressembler, mais de toute évidence erronée:

SELECT 
MIN(c.created_at) AS date, 
c.meta_account_Id, 
c.organization_Id, 
c.user_id, 
c.meta_distributorId, 
c.meta_accountName, 
CASE 
    WHEN sum(s.volumece) IS NULL THEN 0 
    ELSE (SELECT sum(s.volumece) WHERE s.invoice_date>=c.created_at) 
END AS ces 
FROM [commitments] c 
LEFT JOIN [Sales2] s ON c.organization_Id=s.org_id AND 
c.meta_account_Id=s.account_id 
WHERE c.status='active' 
GROUP BY c.meta_account_Id, c.organization_Id, c.user_id, 
c.meta_distributorId, c.meta_accountName 

Fondamentalement, le [Ventes2] est une table des factures et les [engagements ] est un tableau de nouvelles factures créées dans notre système. En les comparant à account_id et en récupérant tous les jours de la création et de l'avancement, aucune facture n'est antérieure à celle entrée dans notre système.

Exemples:

Celui-ci devrait résumer vraiment à 0 bureaux parce que tous les invoice_dates étaient après la date a été enetered

Commitments

Sales2

+2

Pourquoi ne pas simplement mettre 's.invoice_date> = c.created_at' comme autre condition * join *? – Uueerdo

+1

Les exemples de données et les résultats souhaités aideraient vraiment votre question. –

+0

Parce que cette jointure réduirait mes résultats là où je veux juste réduire cette "ces" somme. Fondamentalement, je veux garder les résultats tels quels, disons 18 éléments de ligne, puis je veux affiner les dernières col "ces" sur la base de la somme des factures après la création à la date – nickbrleet

Répondre

1

Je pense que votre déclaration de cas doit être dans la clause sum() pas en dehors de celle-ci. Essayez de conserver la somme (casse ...) au lieu de la casse alors que sum() finit. Avoir du sens? La clause de cas s'applique à chaque volume et non à l'agrégat total.

Probablement pas l'utilisation la plus élégante de l'hypothèse nulle de cas, il soit

sum(CASE when s.invoice_date>=c.created_at then coalesce(s.volumece,0) 
      else 0 
      end) 

plus simple?

+0

Impressionnant oui fonctionne comme un charme. Et merci aussi pour les explications, ça a du sens. – nickbrleet