Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 帐户层次结构Salesforce帐户-SQL Server_Sql Server_Sql Server 2008_Tree_Salesforce - Fatal编程技术网

Sql server 帐户层次结构Salesforce帐户-SQL Server

Sql server 帐户层次结构Salesforce帐户-SQL Server,sql-server,sql-server-2008,tree,salesforce,Sql Server,Sql Server 2008,Tree,Salesforce,我正在编写一份使用Salesforce数据仓库的报告。本质上,给定一个特定的帐户,我需要找到它的层次结构。这可能是在任何级别,但它必须获得所有节点 以下是我所拥有的: WITH tree (id, parentid, level, name) as ( SELECT id, parentid, 0 as level, name FROM accounts WHERE (parentid IS NULL AND recordtypeid NOT IN ('012G000

我正在编写一份使用Salesforce数据仓库的报告。本质上,给定一个特定的帐户,我需要找到它的层次结构。这可能是在任何级别,但它必须获得所有节点

以下是我所拥有的:

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
我真正应该能够做的是提供一个account参数,我正在查找它的详细信息,并让它只返回该参数的层次结构


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

不确定您的帐户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

嗯,这不完全有效。它似乎只给了我在列表中前后移动的子节点。但它也应该得到上面的所有节点,基本上它的所有父节点。这似乎是你想要的。如果你也需要上升,你需要第二个CTE(它可以连接到“树”),从某个点开始,即参数,然后简单地找到它的父项。唯一的乐趣,你将拥有这是获得正确的水平,因为每一个,因为你将开始与孩子的问题是谁在某个中间的层次结构。