问题描述
我希望将数据文件转换为具有多个层次维度的平面文件格式。我已经包含了一个示例,但理想情况下,我希望转换的列数未知,而层次维度将是固定的。
解决方法
如果您有未知或可变的列,您可以在不使用动态 SQL 的情况下动态取消数据透视。注意我们只需要排除两个键列... Where [key] not in ('Country','City')
示例
Select Country,City,Metric = B.[key],Value = B.Value
From YourTable A
Cross Apply ( Select *
From OpenJson( (Select A.* For JSON Path,Without_Array_Wrapper ) )
Where [key] not in ('Country','City')
) B
退货
Country City Metric Value
US NY Snowfall 13
US NY Temp 94
US NY Snowfall 5
US NY Temp 84
UK London Snowfall 6
UK London Temp 85
,
您需要unpivot
您的数据:
SELECT unpvt.country,unpvt.city,unpvt.metrics,unpvt.Valuess
FROM
( SELECT * FROM tablename ) p
UNPIVOT ( Valuess FOR metrics IN ( snowfall,temp) ) unpvt