簡體   English   中英

SQL - 為非透視數據創建屬性輸出

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM