Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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
员工组织结构图的T-SQL分层Json结果_Json_Sql Server_Tsql - Fatal编程技术网

员工组织结构图的T-SQL分层Json结果

员工组织结构图的T-SQL分层Json结果,json,sql-server,tsql,Json,Sql Server,Tsql,我试图从SQLServer数据库中为公司组织结构图输出分层JSON 我想以类似的方式显示数据 我已经能够构建一个查询,将层次结构输出到一个平面表中,如下所示: 我能够通过使用FOR JSON PATH实现我想要的,但这只会真正为我提供一个层次结构所需的数据 有谁知道如何从T-SQL输出多个层次结构级别,以提供类似以下输出的内容: { 'name': 'Lao Lao', 'title': 'general manager', 'ch

我试图从SQLServer数据库中为公司组织结构图输出分层JSON

我想以类似的方式显示数据

我已经能够构建一个查询,将层次结构输出到一个平面表中,如下所示:

我能够通过使用FOR JSON PATH实现我想要的,但这只会真正为我提供一个层次结构所需的数据

有谁知道如何从T-SQL输出多个层次结构级别,以提供类似以下输出的内容:

 {
          'name': 'Lao Lao',
          'title': 'general manager',
          'children': [
            { 'name': 'Bo Miao', 'title': 'department manager' },
            { 'name': 'Su Miao', 'title': 'department manager',
              'children': [
                { 'name': 'Tie Hua', 'title': 'senior engineer' },
                { 'name': 'Hei Hei', 'title': 'senior engineer',
                  'children': [
                    { 'name': 'Pang Pang', 'title': 'engineer' },
                    { 'name': 'Xiang Xiang', 'title': 'UE engineer'
            'children': [
                {'name': 'Pang Pang2', 'title': 'engineer'},
                {'name': 'Pang Pang3', 'title': 'engineer'}
            ] 
            }
                  ]
                }
              ]
            },
            { 'name': 'Yu Jie', 'title': 'department manager' },
            { 'name': 'Yu Li', 'title': 'department manager' },
            { 'name': 'Hong Miao', 'title': 'department manager' },
            { 'name': 'Yu Wei', 'title': 'department manager' },
            { 'name': 'Chun Miao', 'title': 'department manager' },
            { 'name': 'Yu Tie', 'title': 'department manager' }
          ]
        }
      });
我已经尝试了好几个小时了,我还没有找到解决方案,网络上的任何东西似乎都帮不了我


谢谢

我找到了一篇非常好的文章,帮助我实现了我需要做的事情。 这不是最快的解决方案,但很有效

这本Microsoft指南也非常有用:

有了这两个指南,我能够构建出一些有效的东西,我仍然需要清理代码,但这里是我最后得到的,以防这对其他人有所帮助

  IF(OBJECT_ID('dbo.Org') IS NOT NULL)
DROP TABLE dbo.Org;

CREATE TABLE dbo.Org  
(  
    OrgNode hierarchyid,  
    Id int,  
    FullName nvarchar(500),  
    ManagerId int,
    CONSTRAINT PK_Org_OrgNode  
    PRIMARY KEY CLUSTERED (OrgNode)  
);

DECLARE @Children TABLE (
    Id int,  
    ManagerId int,  
    Num int  
);

INSERT @Children (Id, ManagerId, Num)  
SELECT Id, ManagerId,  
  ROW_NUMBER() OVER (PARTITION BY ManagerId ORDER BY ManagerId)   
FROM dbo.Employees;  

WITH paths(path, Id)   
AS (  
SELECT hierarchyid::GetRoot() AS OrgNode, Id   
FROM @Children AS C  
WHERE Id = <CEO ID>
UNION ALL   
SELECT   
CAST(p.path.ToString() + CAST(C.Num AS varchar(30)) + '/' AS hierarchyid),   
C.Id  
FROM @Children AS C   
JOIN paths AS p   
   ON C.ManagerId = P.Id
   AND C.ManagerId <> C.Id
)  
INSERT dbo.Org (OrgNode, O.Id, O.FullName, O.ManagerId)  
SELECT P.path, O.Id, O.UserPrincipalName, O.ManagerId  
FROM dbo.Employees AS O   
JOIN Paths AS P   
   ON O.Id = P.Id  
OPTION (maxrecursion 10000);

IF Object_Id('dbo.JSONHierarchicalListOfReports', 'FN') IS NOT null
  DROP FUNCTION dbo.JSONHierarchicalListOfReports;
GO
/* create the function that creates a JSON representation of the hierarchy */
CREATE FUNCTION JSONHierarchicalListOfReports(@Me HIERARCHYID)
RETURNS NVARCHAR(MAX)
  BEGIN
    RETURN
      (SELECT 
         Coalesce((SELECT '{'+
            '"name":"' +String_Escape(me.FullName, 'json')+'","title":"' + String_Escape(me.FullName, 'json') + '","children":['+Stuff( --get a list of reports
                (SELECT ',' + dbo.JSONHierarchicalListOfReports(reports.OrgNode)
                    FROM dbo.Org AS reports
                    WHERE reports.OrgNode.GetAncestor(1) = me.OrgNode
                FOR XML PATH(''), TYPE
                ).value('.', 'varchar(max)'),1, 1,'')+']}'
         ),'{"name":"'+String_Escape(me.FullName, 'json')+'","title":"'+String_Escape('JOB TITLE HERE', 'json')+'"}') AS reports
         FROM dbo.Org AS me
          WHERE me.OrgNode = @Me
      );
  END;
GO

SELECT dbo.JSONHierarchicalListOfReports(OrgNode)
  FROM dbo.Org
  where dbo.Org.Id = <CEO ID>
请阅读一些关于改进您的问题的提示。DDL和可消费数据帮助我们帮助您。没有数据类型的部分数据的映像不会。
{"name":"abc@abc.com","title":"Manger","children":[{"name":"test.user5555@abc.com","title:":"Worker"}]}