2

多くの異なるディメンションで列を集計したいと考えています。私の問題にはGOUPING SETSが適切だと思いますが、GROUPING SETSから結果のテーブルを変換/再形成する方法がわかりません。

これは、GROUPING SETS を使用した私のクエリです。

select date, dim1, dim2, dim3, sum(value) as sum_value
from table
grouping by date, dim1, dim2, dim3
grouping sets ((date, dim1), (date, dim2), (date, dim3))

クエリは、次のようなテーブルになります。

date        dim1    dim2    dim3    sum_value
2017-01-01  A       NULL    NULL    [value_A]
2017-01-01  B       NULL    NULL    [value_B]
2017-01-01  NULL    C       NULL    [value_C]
2017-01-01  NULL    D       NULL    [value_D]
2017-01-01  NULL    NULL    E       [value_E]
2017-01-01  NULL    NULL    F       [value_F]

しかし、私が本当に必要としているのは、次のようなテーブルです。

date        dim     factor  sum_value
2017-01-01  dim1     A      [value_A]
2017-01-01  dim1     B      [value_B]
2017-01-01  dim2     C      [value_C]
2017-01-01  dim2     D      [value_D]
2017-01-01  dim3     E      [value_E]
2017-01-01  dim3     F      [value_F]

実際の次元数は 3 をはるかに超えるため、クエリをハードコーディングすることはお勧めできません。グループ化セットまたは他の集計方法からテーブルを再形成して、目的のテーブルを取得する方法はありますか?

ありがとう!

4

1 に答える 1

5
select    `date`
         ,elt(log2(GROUPING__ID - 1),'dim1','dim2','dim3')      as dim
         ,coalesce (dim1,dim2,dim3)                             as factor
         ,sum(value)                                            as sum_value

from      `table`

group by  `date`,dim1,dim2,dim3
          grouping sets ((`date`,dim1),(`date`,dim2),(`date`,dim3))
于 2017-05-13T18:40:45.253 に答える