【问题标题】:Account Hierarchy Salesforce Accounts - SQL Server帐户层次结构 Salesforce 帐户 - SQL Server
【发布时间】:2017-06-29 14:24:19
【问题描述】:

我正在处理使用 Salesforce Datawarehouse 的报表。本质上,给定一个特定的帐户,我需要为此找到层次结构。这可以在任何级别,但它必须获得所有节点。

以下是我拥有的:

WITH tree (id, parentid, level, name) as 
(
   SELECT id, parentid, 0 as level, name
   FROM accounts
   WHERE (parentid IS NULL 
   AND recordtypeid NOT IN ('012G0000001NLJSIA4', '012G0000001NLKGIA4'))

   UNION ALL

   SELECT c2.id, c2.parentid, tree.level + 1, c2.name
   FROM accounts c2 
     INNER JOIN tree ON tree.id = c2.parentid
     AND recordtypeid NOT IN ('012G0000001NLJSIA4', '012G0000001NLKGIA4')
)
SELECT *
FROM tree

我真正应该做的是提供一个帐户参数,我正在寻找其详细信息并让它只返回层次结构。

有什么帮助吗?我已经为此苦苦挣扎了几天。

【问题讨论】:

    标签: sql-server sql-server-2008 tree salesforce


    【解决方案1】:

    不确定您的帐户 ID 的数据类型是什么;但是,我保持安全并选择了INT。您需要做的就是为 CTE 的锚部分使用一个参数,该参数将定义为级别 0,递归部分返回给定父项的所有子项。您为什么不尝试以下方法:

    Declare @id INT = 1234;
    
    WITH tree (id, parentid, level, name) as 
    (
       SELECT id, parentid, 0 as level, name
       FROM accounts
       WHERE id = @id
       AND recordtypeid NOT IN ('012G0000001NLJSIA4', '012G0000001NLKGIA4')
    
       UNION ALL
    
       SELECT c2.id, c2.parentid, tree.level + 1, c2.name
       FROM accounts c2 
         INNER JOIN tree ON tree.id = c2.parentid
         AND recordtypeid NOT IN ('012G0000001NLJSIA4', '012G0000001NLKGIA4')
    )
    SELECT *
    FROM tree
    

    【讨论】:

    • 嗯,这并不完全有效。它似乎只给了我在列表中向前和向下的 Children 节点。但它也应该得到上面的所有节点,基本上也得到它的所有父节点。
    • 这似乎是您所要求的。如果您也需要向上,则需要第二个 CTE(可以加入“树”)并从某个点开始,即参数,然后简单地找到它的父级。您将获得的唯一乐趣是为每个级别获得正确的级别,因为您将从处于层次结构中间某个位置的有问题的孩子开始。
    猜你喜欢
    • 2018-06-26
    • 2014-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 2019-08-10
    • 1970-01-01
    相关资源
    最近更新 更多