2013-10-01 41 views
5

Wiem, że to będzie proste, ale po północy z innym kodowaniem mój mózg SQL jest smażony, więc sięgam po jakąś szybką pomoc. Mam tabelę testową z Agentem, AgentID, Kontem nadrzędnym, Identyfikatorem konta i TCV. Muszę pobrać wszystkie identyfikatory agentów/kont, w których Identyfikator konta należy do zagregowanego konta nadrzędnego pod tą nazwą> 10 KB.Grupowanie SQL/Wartość kontraktowa

enter image description here

Więc w tym przykładzie, John ma 2 kont pod abc123 konta rodzica, a ponieważ ich łączna wartość wynosi> = 10K, te 2 będzie wciągnięty. Ale zauważ poniżej, że Jane ma 2 rachunki podobnie w ABC123, ale b/c ich całkowita wartość w jej nazwie to < 10K, nie zostaną one wyciągnięte. Więc wyniki byłoby coś takiego:

enter image description here

Essetially muszę wyciągnąć wszystkie AccountIDs gdzie łączna wartość rachunku dominującej one roll-up, aby dla tej osoby jest> = 10K. BTW, używam SQL Server Management Studio R2.

Odpowiedz

4

Wystarczy wykonać prostą grupę, uzyskując listę agentids/parentaccounts spełniających kryteria 10k. Następnie można użyć, że w sub-select dołączyć z powrotem do tej samej tabeli i uzyskać listę identyfikatorów konta

select agentid, accountid 
from table t 
inner join (
    select agentid, parentaccount 
    from table 
    group by agentid, parentaccount 
    having sum(tcv) >= 10000 
) t1 
    on t.agentid = t1.agentid 
    and t.parentaccount = t1.parentaccount 
2
;WITH MyCTE AS 
(
    SELECT AgentID, 
      ParentAccount, 
      SUM(TCV) AS Total 
    FROM TableName 
    GROUP BY AgentID, 
      ParentAccount 
) 

SELECT T.AgentId, T.AccountId 
FROM Table T 
     JOIN MyCTE M 
      ON M.AgentId = T.AgentId 
      AND M.ParentAccount= T.ParentAccount 
WHERE M.Total>10000