2017-08-04 1 views
1

J'essaye de faire la somme de toutes les ventes/TXN et de compter les identifiants distincts pour tout le mois, et pas seulement la rangée individuelle, dans laquelle le rang est "1". Donc, pour le client "ABC", je veux récupérer toutes leurs données pour Jan, et pour le client "DEF" Je veux toutes leurs données pour FévrierValeurs de somme à partir d'un groupe de lignes spécifiques - SQL

Ci-dessous un exemple de tableau ainsi que ce que mon ensemble de résultats souhaité serait (excuses pour le formatage).

ventes Tableau:

Month|ID |Dte |TXNs|Sales|Rank 
Jan |ABC|1-5-17|1 |$15 |1 
Jan |ABC|1-8-17|2 |$10 |2 
Feb |ABC|2-6-17|1 |$20 |3 
Feb |DEF|2-6-17|2 |$10 |1 
Mar |DEF|3-5-17|1 |$40 |2 
May |DEF|5/2/17|3 |$20 |3 

souhaité Réponse:

Month|IDs|TXNs|Sales 
Jan |1 |3 |$25 
Feb |1 |2 |$10 
+1

Qu'avez-vous essayé? SO n'est pas un service d'écriture de code, il semble être relativement facile de construire une requête en utilisant les clauses SUM COUNT CASE-WHEN-THEN et GROUP BY. – krokodilko

Répondre

0

Vous pouvez utiliser le groupe par et à la clause

select month, count(ID), sum(TNXs), sum(sales) 
from my_table where (month, ID) in (
    select distinct Month, ID 
    from my_table 
    where rank = 1 
) 
group by month 
0

Je pense que les ID que vous avez énumérés dans votre table ne sont pas bons? Est-ce que la première ligne de votre résultat devrait être ABC et le deuxième résultat devrait être DEF?

Quoi qu'il en soit, je pense que cela devrait fonctionner:

select month, ID, sum(TXNs), sum(SALES) 
from SALES_TABLE 
where 
    (
     ID='ABC' 
     and MONTH='Jan' 
    ) 
    or (
     ID='DEF' 
     and MONTH='Feb' 
    ) 
group by ID, MONTH 

edit: J'ai raté la partie de comptage. Comment c'est?

select month, count(ID), sum(TXNs), sum(SALES) 
from SALES_TABLE 
where rank = 1 
group by month 
0

Count Distinct vous devriez obtenir ce que vous cherchez:

SELECT Month, COUNT(DISTINCT ID) AS UniqueIds, COUNT(*) AS Transactions, SUM(Sales) AS TotalSales 
FROM t 
INNER JOIN (
    SELECT Month, ID FROM t WHERE Rank = 1 
)firstRank WHERE t.ID = firstRank.ID AND t.Month = firstRank.Month 
GROUP BY Month 
0

Il est difficile de suivre votre description, mais semble correspondre:

select Month 
    ,count(*) -- number of IDs 
    ,sum(sumTXN) 
    ,sum(sumSales) 
from 
(
    select Month, ID, sum(TXNs) as sumTXN, sum(Sales) as sumSales 
    from tab 
    group by Month, ID 
    having min(Rank) = 1 -- only those IDs with a Rank = 1 within this month 
) as dt 
group by Month