我正在使用 Discovery 的 API 從我們的虛擬機中提取一些資訊,但 JSON 由于某些原因在一個節點中有標題,在另一個節點中有值,它們在方括號中,我很難得到最終結果。
這是 JSON 的淡化版本
DECLARE @JSON nvarchar(max) = N'[
{
"headings": [
"vm_type",
"Hostname"
],
"results": [
[
"AWS EC2 Instance",
null
],
[
"AWS EC2 Instance",
null
]
]
}
]'
SET @JSON = SUBSTRING(@JSON,2,LEN(@JSON) - 2)
SELECT *
FROM OPENJSON(@JSON)
SELECT *
FROM OPENJSON(@JSON,'$.results')
有沒有辦法把它變成一個表,標題為列名,結果與其值的順序相同?
uj5u.com熱心網友回復:
您有一個陣列陣列,因此這實際上是一個動態樞軸。
要進行動態資料透視,您需要動態 SQL。最簡單的旋轉方法通常不是使用PIVOT而是使用條件聚合MAX(CASE
DECLARE @sql nvarchar(max) = N'
SELECT
' (
SELECT STRING_AGG(
QUOTENAME(j.value) N' = MAX(CASE WHEN j2.[key] = ' j.[key] ' THEN j2.value END)',
',
') WITHIN GROUP (ORDER BY j.[key])
FROM OPENJSON(@JSON, '$[0].headings') j
) '
FROM OPENJSON(@JSON, ''$[0].results'') j1
CROSS APPLY OPENJSON(j1.value) j2
GROUP BY
j1.[key];
';
PRINT @sql; --for testing
EXEC sp_executesql
@sql,
N'@JSON nvarchar(max)',
@JSON = @JSON;
資料庫<>小提琴
請注意正確使用QUOTENAME來參考列名,并使用sp_executesql帶引數來傳遞實際資料,而不是將其直接注入查詢文本中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/359707.html
標籤:json sql-server 发现
上一篇:使用php決議回應json輸出的問題-VisaDeveloperAPI
下一篇:JOLT轉換-嵌套的Json物件
