Изменить данные в указанном формате c - PullRequest
0 голосов
/ 07 января 2020

Я хочу представить данные в указанном формате c. В настоящее время данные выглядят так:

product_id  order_id   product_type  day1_sale day2_sale  day3_sale  day4_sale
  123         456           A           null      0.2        0.3        null
  123         456           B           null      null       0.4        null
  111         222           A           null      null       null       null
  333         444           B            0.7      0.1        0.2        0.6

Я хочу представить их в следующем формате -

product_id  order_id   product_type   sale_day    %sales_on_day  
  123         456           A           day2          0.2      
  123         456           A           day3          0.3       
  123         456           B           day3          0.4      
  111         222           A           null          null
  333         444           B           day1          0.7
  333         444           B           day2          0.1
  333         444           B           day3          0.2
  333         444           B           day4          0.6

Есть ли способ получить данные в этом формате?

Ответы [ 2 ]

2 голосов
/ 07 января 2020

Ниже для BigQuery Standard SQL

#standardSQL
SELECT product_id, order_id, product_type, x.*
FROM `project.dataset.table`,
UNNEST([STRUCT('day1' AS sale_day, day1_sale AS sales_on_day), ('day2', day2_sale), ('day3', day3_sale), ('day4', day4_sale)]) x
WHERE NOT sales_on_day IS NULL   

, если применить к образцу данных из вашего вопроса - результат

Row product_id  order_id    product_type    sale_day    sales_on_day     
1   123         456         A               day2        0.2  
2   123         456         A               day3        0.3  
3   123         456         B               day3        0.4  
4   333         444         B               day1        0.7  
5   333         444         B               day2        0.1  
6   333         444         B               day3        0.2  
7   333         444         B               day4        0.6  
1 голос
/ 07 января 2020

Вы хотите отключить и отфильтровать. Вот BigQuery'i sh способ сделать это:

with t as (
      select 123 as product_id, 456 as order_id, 'A' as product_type, null as day1_sale, 0.2 as day2_sale, 0.3 as day3_sale, null as day4_sale UNION ALL
      select 123, 456, 'B', null,      null,       0.4,        null UNION ALL
      select 111, 222, 'A', null,      null,       null,       null UNION ALL
      select 333, 444, 'B', 0.7,      0.1,        0.2,        0.6
     )
select t.product_id, t.order_id, t.product_type, ds.*
from t cross join
     unnest(array[struct('1' as day, day1_sale as day_sale),
                  ('2', day2_sale),
                  ('3', day3_sale),
                  ('4', day4_sale)
                 ]
            ) ds
where day_sale is not null;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...