Sql server 帐户层次结构Salesforce帐户-SQL Server
我正在编写一份使用Salesforce数据仓库的报告。本质上,给定一个特定的帐户,我需要找到它的层次结构。这可能是在任何级别,但它必须获得所有节点 以下是我所拥有的: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
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(它可以连接到“树”),从某个点开始,即参数,然后简单地找到它的父项。唯一的乐趣,你将拥有这是获得正确的水平,因为每一个,因为你将开始与孩子的问题是谁在某个中间的层次结构。