Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.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结果输出到JSON(基于特定列的行)[Microsoft SQL Server]_Sql_Json_Sql Server - Fatal编程技术网

将SQL结果输出到JSON(基于特定列的行)[Microsoft SQL Server]

将SQL结果输出到JSON(基于特定列的行)[Microsoft SQL Server],sql,json,sql-server,Sql,Json,Sql Server,我有三个表,下面是三个表,我正在共享我的SQL查询以从SQL打印JSON SEC_用户、用户配置文件条目、SEC_文件夹 正如您在JSON中看到的,有一个名为extension_tenant的键,它的值有Team1、Team2、Team3等等 当我运行上面的查询时,我得到一个包含JSON的单行查询结果,下面是图像,上面的JSON是下面结果的美化版本 如何基于不同的扩展名为创建单独的JSON 我想知道是否有一种方法可以打破这个基于extension_tenant的JSON,并将其输出到基于exte

我有三个表,下面是三个表,我正在共享我的SQL查询以从SQL打印JSON

SEC_用户、用户配置文件条目、SEC_文件夹

正如您在JSON中看到的,有一个名为extension_tenant的键,它的值有Team1、Team2、Team3等等

当我运行上面的查询时,我得到一个包含JSON的单行查询结果,下面是图像,上面的JSON是下面结果的美化版本

如何基于不同的扩展名为创建单独的JSON

我想知道是否有一种方法可以打破这个基于extension_tenant的JSON,并将其输出到基于extension_tenant的行下面的行中

假设扩展名为_tenant=Team1的所有内容都存储在单独的JSON结果中

示例:适用于所有团队1

{
  "users": [
    {
      "displayName": "Dennis Law",
      "givenName": "Dennis",
      "surname": "Law",
      "extension_user_type": "user",
      "identities": [
        {
          "signInType": "emailAddress",
          "issuerAssignedId": "dennislaw@gmail.com"
        }
      ],
      "extension_timezone": "VET",
      "extension_locale": "en-IN",
      "extension_tenant": "Team1"
    },
    {
      "displayName": "Shaggy Nate",
      "givenName": "Shaggy",
      "surname": "Nate",
      "extension_user_type": "user",
      "identities": [
        {
          "signInType": "userName",
          "issuerAssignedId": "Shaggynatealpha"
        }
      ],
      "extension_timezone": "NST",
      "extension_locale": "en-AF",
      "extension_tenant": "Team1"
    }
  ]
} ";
对于所有作为团队2的扩展_租户

{
  "users": [
    {
      "displayName": "Geroge West",
      "givenName": "Geroge",
      "surname": "West",
      "extension_user_type": "user",
      "identities": [
        {
          "signInType": "userName",
          "issuerAssignedId": "gwest"
        }
      ],
      "extension_timezone": "PST",
      "extension_locale": "en-GB",
      "extension_tenant": "Team2"
    }
  ]`
} ";
请告诉我是否有办法,如果您想要更多的数据,请发表意见。

您只需要一个WITH..AS子句,在该子句中,除了最后两行之外,保留当前查询,然后按扩展名过滤掉,例如

您只需要一个WITH..AS子句,在该子句中保留除最后两行之外的当前查询,然后按扩展名过滤掉,例如


如果我正确理解了问题,您需要修改您的陈述,如下所示:

;WITH cte AS (
   -- The current statement, without the FOR JSON part
   SELECT ...
   --FOR JSON PATH, ROOT('users')
)
SELECT DISTINCT t1.extension_tenant, t2.json
FROM cte t1
CROSS APPLY (
   SELECT 
      displayName, 
      givenName, 
      surname, 
      extension_user_type, 
      JSON_QUERY(identities) AS identities, 
      extension_timezone, 
      extension_locale, 
      extension_tenant
   FROM cte
   WHERE extension_tenant = t1.extension_tenant
   FOR JSON PATH, ROOT('users')
) t2 (json)
注意,您需要使用JSON_查询来防止转义标识JSON。以下简化示例是一个可行的解决方案:

;WITH cte AS (
   SELECT displayName, extension_tenant, identities
   FROM (VALUES
      ('Dennis Law', 'Team1', '[{"signInType": "userName", "issuerAssignedId": "Shaggynatealpha"}]'),
      ('Geroge West', 'Team2', '[{"signInType": "userName", "issuerAssignedId": "Shaggynatealpha"}]'),
      ('Shaggy Nate', 'Team1', '[{"signInType": "userName", "issuerAssignedId": "Shaggynatealpha"}]')
   ) ottr (displayName, extension_tenant, identities)
   --FOR JSON PATH, ROOT('users')
)
SELECT DISTINCT t1.extension_tenant, t2.json
FROM cte t1
CROSS APPLY (
   SELECT displayName, extension_tenant, JSON_QUERY(identities) AS identities
   FROM cte
   WHERE extension_tenant = t1.extension_tenant
   FOR JSON PATH, ROOT('users')
) t2 (json)
结果:

extension_tenant    json
Team1               {"users":[{"displayName":"Dennis Law","extension_tenant":"Team1","identities":[{"signInType": "userName", "issuerAssignedId": "Shaggynatealpha"}]},{"displayName":"Shaggy Nate","extension_tenant":"Team1","identities":[{"signInType": "userName", "issuerAssignedId": "Shaggynatealpha"}]}]}
Team2               {"users":[{"displayName":"Geroge West","extension_tenant":"Team2","identities":[{"signInType": "userName", "issuerAssignedId": "Shaggynatealpha"}]}]}

如果我正确理解了问题,您需要修改您的陈述,如下所示:

;WITH cte AS (
   -- The current statement, without the FOR JSON part
   SELECT ...
   --FOR JSON PATH, ROOT('users')
)
SELECT DISTINCT t1.extension_tenant, t2.json
FROM cte t1
CROSS APPLY (
   SELECT 
      displayName, 
      givenName, 
      surname, 
      extension_user_type, 
      JSON_QUERY(identities) AS identities, 
      extension_timezone, 
      extension_locale, 
      extension_tenant
   FROM cte
   WHERE extension_tenant = t1.extension_tenant
   FOR JSON PATH, ROOT('users')
) t2 (json)
注意,您需要使用JSON_查询来防止转义标识JSON。以下简化示例是一个可行的解决方案:

;WITH cte AS (
   SELECT displayName, extension_tenant, identities
   FROM (VALUES
      ('Dennis Law', 'Team1', '[{"signInType": "userName", "issuerAssignedId": "Shaggynatealpha"}]'),
      ('Geroge West', 'Team2', '[{"signInType": "userName", "issuerAssignedId": "Shaggynatealpha"}]'),
      ('Shaggy Nate', 'Team1', '[{"signInType": "userName", "issuerAssignedId": "Shaggynatealpha"}]')
   ) ottr (displayName, extension_tenant, identities)
   --FOR JSON PATH, ROOT('users')
)
SELECT DISTINCT t1.extension_tenant, t2.json
FROM cte t1
CROSS APPLY (
   SELECT displayName, extension_tenant, JSON_QUERY(identities) AS identities
   FROM cte
   WHERE extension_tenant = t1.extension_tenant
   FOR JSON PATH, ROOT('users')
) t2 (json)
结果:

extension_tenant    json
Team1               {"users":[{"displayName":"Dennis Law","extension_tenant":"Team1","identities":[{"signInType": "userName", "issuerAssignedId": "Shaggynatealpha"}]},{"displayName":"Shaggy Nate","extension_tenant":"Team1","identities":[{"signInType": "userName", "issuerAssignedId": "Shaggynatealpha"}]}]}
Team2               {"users":[{"displayName":"Geroge West","extension_tenant":"Team2","identities":[{"signInType": "userName", "issuerAssignedId": "Shaggynatealpha"}]}]}

这正是我应该做的!谢谢你的回答!这正是我应该做的!谢谢你的回答!我认为在您的解决方案中,仅当您选择Team1或Team2时,它才会为您构建。也许在您可以嵌套的地方,比如从表中选择extension\u tenant=select*的地方……我认为在您的解决方案中,只有在您选择Team1或Team2时,它才会为您构建。可能是在您可以嵌套的地方,比如从表中选择扩展名。。。