【问题标题】:SQL Grouping / Contract ValueSQL 分组/合同价值
【发布时间】:2013-10-01 12:17:29
【问题描述】:

我知道这将是一个简单的问题,但是在午夜运行其他编码之后,我的 SQL 大脑被炸毁了,所以我只是寻求一些快速帮助。我有一个包含 Agent、AgentID、Parent Account、AccountID 和 TCV 的测试表。我需要做的是提取所有代理/帐户 ID,其中 AccountID 属于该代理名称 >= 10K 下的聚合父帐户。

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

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

【问题讨论】:

    标签: sql sql-server group-by rank


    【解决方案1】:

    您只需通过/必须获取满足 10k 标准的 agentid/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
    

    【讨论】:

      【解决方案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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-09
        • 1970-01-01
        • 2017-01-27
        相关资源
        最近更新 更多