首页 > 解决方案 > 使用 2 列中的数据返回 SQL Server 2016 中的 json 值列表

问题描述

我有一个包含 2 列的数据库

A     B
--    --
X     1995
Y     2005
C     1962
D     2003

我正在尝试创建一个 SQL 语句,它将采用逗号分隔值的字符串并返回 B 中值的 json 列表,其中字符串中的任何值都在 A

所以如果逗号分隔的字符串是'X,C'json 列表将是[1995,1962]

我一直在使用 json 路径来尝试这个,但我无法完全按照我想要的方式得到它,而且我已经旋转了太长时间了

这是我尝试过的:

Select mt.B as json_list_b_values
 From  [dbo].[myTable] mt
Where  mt.A in (Select value From String_Split('X,C', ',')) for json path

这是输出:

[ {"json_list_b_values":"1995"}, {"json_list_b_values":"1962"} ]

标签: sqlsql-server-2016

解决方案


由于您在 2016 年无法使用STRING_AGG,但您可以使用久经考验的旧方法FOR XML PATHSTUFF方法:

DECLARE @list varchar(8000) = 'X,C';
WITH VTE AS(
    SELECT *
    FROM(VALUES('X',1995),
               ('Y',2005),
               ('C',1962),
               ('D',2003)) V(A,B))
SELECT '[' + STUFF((SELECT CONCAT(',',V.B)
                    FROM VTE V
                         CROSS APPLY STRING_SPLIT(@list,',') SS
                    WHERE SS.[value] = V.A
                    FOR XML PATH('')),1,1,'') + ']';

推荐阅读