[英]SQL - create attribute output for unpivoted data
我有一個如下所示的數據集:
Position_Date Portfolio Country Weight BM Weight
2017-09-30 Port1 Mexico 0.2 0.0
2017-09-30 Port1 Mexico 0.1 0.1
2017-09-30 Port1 USA 0.2 0.2
2017-09-30 Port1 USA 0.3 0.1
我想使用 SQL 查詢將此存儲的數據集轉換為以下輸出:
Portfolio_Date Portfolio Dimension Dimension_Value Measure Measure_Value
2017-09-30 Port1 Country Mexico Weight 0.3
2017-09-30 Port1 Country Mexico BM Weight 0.1
2017-09-30 Port1 Country USA Weight 0.5
2017-09-30 Port1 Country USA BM Weight 0.3
2017-09-30 Port1 Portfolio Country Weight 0.8
2017-09-30 Port1 Portfolio Country BM Weight 0.4
我想知道創建數據集的有效原因是什么? 我是否必須對數據進行透視,然后對其進行解透視以創建我的最終數據集? 或者是否有另一種方法將 CROSS APPLY 與 GROUP BY 一起使用,我可以使用我在本論壇的其他帖子中看到的方法?
謝謝
這個問題比我最初想象的要棘手得多。 在進行聚合后,我會進行逆透視:
select t.Portfolio_Date, t.Portfolio,
v.*
from (select t.Portfolio_Date, t.Portfolio,
coalesce(country, 'Country') as dimension_value, -- coalesce is a shortcut for getting the aggregated row
coalesce(country, 'Portfolio') as dimension,
sum(weight) as weight, sum(bm_weight) as bm_weight
from t
group by grouping sets ( (t.Portfolio_Date, t.Portfolio, country), (t.Portfolio_Date, t.Portfolio) )
) t outer apply
(values (dimension, dimension_value, 'Weight', weight),
(dimension, dimension_value, 'BM Weight', bm_weight)
) v(dimension, dimension_value, measure, measure_value);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.