将数据文件转换为平面文件?

问题描述

我希望将数据文件转换为具有多个层次维度的平面文件格式。我已经包含了一个示例,但理想情况下,我希望转换的列数未知,而层次维度将是固定的。

1

解决方法

如果您有未知或可变的列,您可以在不使用动态 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