SQL Server中按PID、LID分组并将Name/Value转为JSON的方法
当然可以!SQL Server有专门的内置功能来搞定这个行转JSON的需求,完全不用手动拼接字符串(既麻烦又容易出错)。根据你的SQL Server版本,这里有两种靠谱的实现方式:
1. SQL Server 2022+ / Azure SQL Database(推荐写法)
如果你用的是较新的版本,直接用JSON_AGG函数就可以一步到位,语法简洁还靠谱:
SELECT PID, LID, JSON_AGG(JSON_OBJECT(Name : Value)) AS JSON FROM SqlTable GROUP BY PID, LID;
小解释:
JSON_OBJECT(Name : Value):把每一行的Name和Value转换成单个JSON键值对(比如{"Technolgy":"ELECTRICAL"})JSON_AGG(...):把同一个PID+LID分组里的所有键值对合并成一个完整的JSON对象
2. 旧版本SQL Server(2016-2019)
要是你的版本不支持JSON_AGG,可以用FOR JSON PATH结合子查询来实现:
SELECT t.PID, t.LID, ( SELECT Name AS [key], Value AS [value] FROM SqlTable WHERE PID = t.PID AND LID = t.LID FOR JSON PATH, WITHOUT_ARRAY_WRAPPER ) AS JSON FROM SqlTable t GROUP BY t.PID, t.LID;
小解释:
- 子查询里用
FOR JSON PATH把当前分组的行转成JSON数组,WITHOUT_ARRAY_WRAPPER参数会去掉数组的[]括号,直接返回JSON对象 - 外层通过
GROUP BY保证每个PID+LID组合只输出一行
关于输出格式
两种写法都会输出你想要的完整JSON对象(实际输出是紧凑格式,你展示的换行只是排版效果):
{"Technolgy":"ELECTRICAL","Source":"100","Estimation":"50","Capacity":"Full"}
内容的提问来源于stack exchange,提问作者Magendran V
相关产品推荐
相关产品推荐

