对于这样的SQL表
| A列|B栏|
| - -|- -|
| × ×|年|
| × ×|兹兹|
| 响|年|
我想检索如下所示的JSON结果
{"Column A": ["Xxx", "Rrr"],
"Column B": ["Yyyyy", "zzzz"]}
每列的唯一/相异值应该是作为值添加到JSON键的数组元素。
编辑:备注:SQL Server版本早于2017。
编辑二:
1.应选择表中每列不同值
1.应将选定的非重复值转换为列表。
1.所有列名都应转换为JSON键,列表值应转换为JSON值。
1条答案
按热度按时间4sup72z81#
您可以根据需要采用this SO answer。
这样就得到了
| JSON格式|
| - -|
| {“A列”:[“Rrr”,“Xxx”],“B列”:[“Yyyy”,“zzzz”]}|
另请在this db<>fiddle(SQL Server 2016)中查看它的实际应用。
详细解释,由内而外:
STRING_ESCAPE
确保所选值被正确转义为有效的JSON值。FOR XML PATH
将内部查询的结果作为XML而不是行集返回。DISTINCT
确保每个元素只有一次。CONCAT
连接逗号和双引号。STUFF
删除由CONCAT
添加的不必要的前导逗号。JSON_QUERY
会从建构的JSON字串产生对象。FOR JSON PATH
将构造的列连接到一个JSON中。请参见this db<>fiddle中的各个步骤。
您还可以使用动态SQL(如this SO answer中所示)为表中的所有列自动执行此操作:
如需具有五个来源数据行的范例,请参阅this db<>fiddle。