sql - 使用 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"} ]
解决方案
由于您在 2016 年无法使用STRING_AGG
,但您可以使用久经考验的旧方法FOR XML PATH
和STUFF
方法:
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,'') + ']';
推荐阅读
- angular - 如何在 formArray 中的 formControl 上执行 setValue?
- javascript - 多个选项卡的冗余 HTML 通知
- dialogflow-es - Dialogflow 忽略链接到我的操作的参数
- javascript - 莫里斯条形图
- java - 对于我的班级/子班级情况,最好的方法是什么?
- pandas - 在列中查找连续的非负数块
- python - 大型数据集的 orca 服务器通信问题
- javascript - 如何在 javascript 中从硬件获取 X.509 证书
- express - 通过 post 请求发送数据失败
- angular - 使用 Angular 和 agm 获取用户地理位置并将 Google 热图居中