SQL Server中JSON数组字段查询无结果,求正确查询方案
SQL Server JSON数组查询无结果的解决方法
你的问题出在item_pieces_list存储的是JSON数组,而JSON_VALUE只能从单个JSON对象中提取属性,直接用$.satuan找不到对应值,所以返回空结果。
正确的查询方式
方式1:拆分数组为多行记录
如果需要把每个数组元素对应的satuan单独作为一行返回,用OPENJSON配合CROSS APPLY拆分数组:
SELECT medicalkes.id, JSON_VALUE(json_item.value, '$.satuan') AS Name FROM [cisea.bamedika.co.id-hisys].dbo.medicine_alkes AS medicalkes CROSS APPLY OPENJSON(medicalkes.item_pieces_list) AS json_item
执行后会得到如下结果:
| id | Name |
|---|---|
| 0 | BOX |
| 0 | BOX10 |
| 1 | AMPUL |
| 1 | BOX10 |
方式2:将同一行的所有satuan合并为字符串
如果需要把同一id下的所有satuan合并成逗号分隔的字符串,可结合STRING_AGG:
SELECT medicalkes.id, STRING_AGG(JSON_VALUE(json_item.value, '$.satuan'), ', ') AS NameList FROM [cisea.bamedika.co.id-hisys].dbo.medicine_alkes AS medicalkes CROSS APPLY OPENJSON(medicalkes.item_pieces_list) AS json_item GROUP BY medicalkes.id
执行结果:
| id | NameList |
|---|---|
| 0 | BOX, BOX10 |
| 1 | AMPUL, BOX10 |
内容的提问来源于stack exchange,提问作者Muttaqin
相关产品推荐
相关产品推荐

