2016-08-27 108 views
1

我有数据,如低于嵌套JSON 2016

enter image description here

所示的图像中,我试图在SQL Server 2016使用FOR JSON PATH并获得JSON它看起来像这样生成一个JSON:

[ 
{"X":1,"VAL":{"Y":"A"}} 
, 

{"X":1,"VAL":{"Y":"B"}} 
] 

但我期待看起来像一个组合如下所示的东西。

[ 
{"X":1,"VAL":{"Y":"A", "Y":"B"}} 
] 

有人可以帮助我如何在SQL Server 2016中实现这个吗?到目前为止,我试图通过连接来获取嵌套的JSON。

;WITH CTE (X,Y) AS 
(
    SELECT 1 , 'A' 
    UNION ALL 
    SELECT 1 , 'B' 
) 
SELECT 
    A.X, B.Y AS 'VAL.Y' 
FROM 
    CTE A 
INNER JOIN 
    CTE B ON A.X = B.X AND A.Y = B.Y 
FOR JSON PATH 

回答

0

尝试是这样的:

declare @t table (X int, Y varchar(1)); 

insert into @t(x,y) 
values (1,'A'), (1,'B'); 

with l1 as (select distinct x from @t) 
select l1.X, VAL.Y 
from l1 join @t as VAL on l1.x = VAL.x 
for json auto, without_array_wrapper 

CTE将从第一列的表不同的值,然后与主表通过此列加入。 FOR JSON AUTO将嵌套结果并为您提供所需的结构。结果是:

{"X":1,"VAL":[{"Y":"A"},{"Y":"B"}]}