2013-10-01 14 views
5

So che questo sarà semplice, ma dopo una sessione di mezzanotte in un'altra codifica il mio cervello SQL è fritto, quindi sto solo cercando un aiuto veloce. Ho una tabella di test con Agent, AgentID, Parent Account, AccountID e TCV. Quello che devo fare è estrarre tutti gli ID degli account/degli agenti in cui gli ID account appartengono a un account principale aggregato con quel nome di agent> = 10K.SQL Grouping/Contract Value

enter image description here

Quindi in questo esempio, John ha 2 conti sotto l'account genitore ABC123 e dal momento che il loro valore totale è> = 10K, questi 2 otterrebbe tirato. Ma nota qui sotto dove Jane ha 2 account allo stesso modo in ABC123 ma b/c il loro valore totale nel suo nome è < 10K, non sarebbero tirati. Quindi, i risultati sarebbero qualcosa di simile:

enter image description here

Essetially ho bisogno di tirare tutti AccountIDs in cui il valore totale del conto genitore che roll-up a per quella persona è> = 10K. A proposito, sto usando SQL Server Management Studio R2.

risposta

4

Basta fare un semplice gruppo per/dover ottenere un elenco di agentidi/account padre che soddisfano i criteri 10k. Quindi è possibile utilizzare che in un sub-select di unirsi di nuovo allo stesso tavolo e ottenere l'elenco dei conti ids

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