SQL Server 2016: resultados de la consulta en formato JSON

lanza-p

Estoy usando SQL Server 2016 tengo esta consulta:

SELECT TOP (100) 
        brm.practice,
        (select count(*) from _rl_metadata where practice=brm.practice) As TotalPractice,
        brm.primary_subject_area,
        (select count(*) from _rl_metadata where primary_subject_area=brm.primary_subject_area) As TotalSubject,
        brm.content_id,
        brm.content_title
  FROM [_bersin_rl_metadata] AS brm 
    Where brm.is_archive <> 1 and brm.is_published_to_site = 1 

Ingresa el código aquí

de esta tabla:

CREATE TABLE [dbo].[_rl_metadata](
    [content_id] [bigint] NOT NULL,
    [content_title] [varchar](200) NULL,
    [publish_date] [datetime] NULL,
    [practice] [nvarchar](50) NULL,
    [primary_subject_area] [nvarchar](50) NULL
)

que devuelve estos resultados:

ingrese la descripción de la imagen aquí

Quiero mostrar estos resultados en un formato JSON jerárquico (quiero usarlo en un gráfico radial d3 como este: https://bl.ocks.org/mbostock/4348373 ) agrupados por el número de activos en Práctica, luego Asunto y mostrando las propiedades de cada activo (p. ej., título, ID, fecha de publicación) de esta manera:

{
    "name": "Research",
    "children": [{
        "name": "Human Resources",
        "size": 290,
        "children": [{
                "name": "HR & Talent Analytics",
                "size": 75,
                "children": [{ "name": "People Analytics Framework" }, { "name": "Data, Big Data and You" }, ...]
            },
            {
                "name": "HR Org. & Governance",
                "size": 52,
                "children": [{ "name": "Structuring the HR Business" }, { "name": "Relationship Management" }, ...]
            },... 
        ]
    }]
}

¿Cuál es la mejor manera de obtener esta estructura usando SQL Server 2016?

Bogdan Sahlean

Prueba la siguiente solución:

DECLARE @SourceTable TABLE (
    Level1_Name NVARCHAR(50) NOT NULL,
    Level1_Size INT NOT NULL,
    Level2_Name NVARCHAR(50) NOT NULL,
    Level2_Size INT NOT NULL,
    Content     NVARCHAR(100) NOT NULL
);
INSERT  @SourceTable
VALUES  
('Leadership', 270, 'Solutions', 70,    'Book #1'),
('Leadership', 270, 'Solutions', 70,    'Book #2'),
('Leadership', 270, 'Strategy', 121,    'Book #3'), 
('Leadership', 270, 'Strategy', 121,    'Book #4'), 
('Leadership', 270, 'Strategy', 121,    'Book #5'), 
('Leadership', 270, 'Development', 10,  'Book #6'), 
('Coco Jambo', 111, 'Solutions', 111, 'Book #111');

SELECT 
    name    = 'Root object',
    children= (
        SELECT  DISTINCT 
            name    = lvl1.Level1_Name, 
            size    = lvl1.Level1_Size,
            children= (
                SELECT  DISTINCT 
                    name    = lvl2.Level2_Name, 
                    size    = lvl2.Level2_Size,
                    children= (
                        SELECT  DISTINCT 
                            name    = lvl3.Content 
                        FROM    @SourceTable lvl3
                        WHERE   lvl2.Level1_Name = lvl1.Level1_Name 
                        AND     lvl3.Level2_Name = lvl2.Level2_Name
                        FOR JSON PATH
                    )
                FROM    @SourceTable lvl2
                WHERE   lvl2.Level1_Name = lvl1.Level1_Name
                FOR JSON PATH
            )
        FROM    @SourceTable lvl1
        FOR JSON PATH
    )
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER

Resultados:

{
  "name": "Root object",
  "children": [
    {
      "name": "Leadership",
      "size": 270,
      "children": [
        {
          "name": "Development",
          "size": 10,
          "children": [
            {
              "name": "Book #6"
            }
          ]
        },
        {
          "name": "Solutions",
          "size": 70,
          "children": [
            {
              "name": "Book #1"
            },
            {
              "name": "Book #111"
            },
            {
              "name": "Book #2"
            }
          ]
        },
 ...

Manifestación

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

SQL Server 2016: resultados de la consulta en formato JSON

Utilice la nueva instrucción FOR JSON PATH de SQL Server 2016 en una consulta T-SQL y devuelva varias filas (o conjuntos de resultados) de JSON

Resultados de la consulta SQL en tkinter

JSON de SQL Server 2016 en la columna existente

Use el formato DE_DE y lugares decimales infinitos en los resultados de la consulta SQL

Formato Json de SSMS de SQL Server 2016

SQL Server muestra la salida de la consulta en cierto formato

Mostrar subtotales en los resultados de la consulta de SQL Server

Consulta para convertir un tipo de formato específico de 12 horas a un tipo de formato de 24 horas en SQL Server 2016

Seleccione los resultados de varios elementos de matriz en el documento Json con la función OPENJSON de Sql Server 2016

SQL Server: ¿cómo garantizar que los resultados de la consulta se almacenen en caché?

Transponer los resultados de la consulta de SQL Server

Minutos al formato hh: mm en la consulta de SQL Server 2008

SQL Server 2016 excluye resultados en seleccionar

Consulta de SQL Server 2014 en formato XML específico

Consolidar los resultados de la consulta en sql

Usar variables sql en los resultados de la consulta

mostrar los resultados de la consulta de mysql en formato xml usando php

La consulta de Django no pasa a AJAX en formato JSON

obtener el resultado de la consulta sql en formato xml?

Hibernate formato de consulta sql en la consola

¿Cuál es la mejor manera de optimizar los resultados de una consulta en SQL Server 2008?

Convierta datos de la base de datos de SQL Server en formato JSON usando python

Obtener la longitud de la matriz json en SQL Server 2016

Microsoft SQL Server: cómo filtrar los resultados de una segunda consulta de la primera consulta

Sumar los resultados de la consulta SQL en la misma consulta

Resultados de la consulta de SQL Server al volcado de SQL

SQL Server 2016 seleccione dónde en la matriz de objetos json

Cómo cambiar el nombre de la columna JSON en SQL Server 2016

TOP Lista

CalienteEtiquetas

Archivo