SQL分组/合同价值

时间:2013-10-01 12:17:30

标签: sql sql-server group-by rank

我知道这将是一个简单的,但在午夜运行其他编码之后,我的SQL大脑就会被炒掉,所以我只是想要快速帮助。我有一个包含Agent,AgentID,Parent Account,AccountID和TCV的测试表。我需要做的是将AccountID所属的所有代理/帐户ID拉到该代理名称> = 10K下的聚合父帐户。

enter image description here

因此,在此示例中,John在父帐户ABC123下有2个帐户,并且由于它们的总值>> = 10K,因此这两个帐户将被取消。但请注意下面Jane在ABC123下同时拥有2个账户,但b / c在她的名字中的总价值是< 10K,他们不会被拉。所以结果将是这样的:

enter image description here

实际上,我需要提取所有AccountID,其中他们为该人员汇总的父帐户的总价值> = 10K。顺便说一下,我正在使用SQL Server Management Studio R2。

2 个答案:

答案 0 :(得分:3)

你只需做一个简单的小组/必须获得符合10k标准的agentids / parentaccounts列表。然后,您可以在子选择中使用它连接回同一个表并获取帐户ID列表

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

答案 1 :(得分: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