2013-10-01 20 views
5

Bunun basit bir tane olacağını biliyorum ama bir gece yarısı diğer kodlamada çalıştırdıktan sonra SQL beynim kızartılıyor, bu yüzden biraz yardım almak için dışarı çıkıyorum. Ajan, AgentID, Ana Hesap, AccountID ve TCV ile bir test tablom var. Yapmam gereken şey, AccountID'lerin söz konusu aracılar> = 10K adı altında bir birleşik ana hesaba ait olduğu tüm aracı/hesap kimliklerini çekmektir.SQL Gruplama/Sözleşme Değeri

enter image description here

Yani bu örnekte, John üst hesap ABC123 altında 2 hesapları var ve bunların toplam değeri> = 10K olduğundan, bu 2 çekti olacaktı. Ancak, Jane'in ABC123 ile aynı şekilde 2 hesabına sahip olduğu ancak ismindeki toplam değerlerinin < 10K olduğu durumlarda, çekilmeyecektir. Ben ana hesabın toplam değeri onlar roll-up o kişi = 10K> olduğu için tüm AccountIDs çekmek gerekir

enter image description here

Essetially: Yani sonuç böyle bir şey olurdu. BTW, SQL Server Management Studio R2 kullanıyorum.

cevap

4

Basit bir grubu, 10k ölçütlerini karşılayan temsilci/parenta hesabı listesi almak/almak zorundasınız. Sonra tekrar aynı masaya katılmak için bir alt select odasını kullanabilirler ve hesap kimliklerinin listesini alabilirsiniz

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 
İlgili konular