2013-10-01 3 views
5

Я знаю, что это будет просто, но после полночного пробега при другой кодировке мой мозг SQL жарится, поэтому я просто протягиваю вам какую-то помощь. У меня есть тестовая таблица с Agent, AgentID, Parent Account, AccountID и TCV. Что мне нужно сделать, это вывести все идентификаторы агента/учетной записи, в которых учетные имена принадлежат к совокупной родительской учетной записи под этим именем агента> = 10K.SQL Grouping/Contract Value

enter image description here

Таким образом, в этом примере, Джон имеет 2 счета в рамках родительского счета ABC123 и так как их общая стоимость составляет> = 10K, эти 2 будут втянуты. Но заметьте ниже, где Джейн имеет 2 счета также под ABC123, но b/c их общая стоимость от ее имени равна < 10K, их не тянет. Таким образом, результаты были бы что-то вроде этого:

enter image description here

Essetially Мне нужно тянуть все AccountIDs, где общая стоимость родительского счета они Сворачивающиеся к для этого человек> = 10K. Кстати, я использую SQL Server Management Studio R2.

ответ

4

Вы просто делаете простую группу// должны получить список агентов/родительских учетных записей, соответствующих критериям 10k. Затем вы можете использовать это в суб-выберите, чтобы присоединиться обратно в ту же таблицу и получить список учетных записей идентификаторам

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