разбиение данных по критерию в SQL - PullRequest
0 голосов
/ 05 июля 2018

Как разделить данные по критерию?

SELECT [Dt]
      , [CustomerName]

      , [ItemRelation]

      , [SaleCount]
      , [DocumentNum]
      , [DocumentYear]
      , [IsPromo]
      , [CustomerType]
  FROM [Action]. [Dbo]. [FC]

[IsPromo] имеет значения 0 и 1. Мне нужно разделить данные на количество продаж на [SaleCount] для нулевой категории ispromo!

Например, у меня есть 20 наблюдений по ispromo = 0, где [SaleCount] только 15 ненулевых значений. Рассчитайте коэффициент, разделите общее количество дней на количество дней, когда не было нулевых продаж, на продажу. 15/20 = 0,75. Это должно быть сделано для каждой страты (группы) [CustomerName] + [ItemRelation] + [DocumentYear] отдельно. Итак, если в группе такой коэффициент больше 0,71, то такие группы следует записать в таблицу mytab1 если меньше, то в mytab2

Как это сделать?

образец данных

Dt  CustomerName    ItemRelation    SaleCount   DocumentNum DocumentYear    IsPromo
2018-02-19 00:00:00.000 1   11683   0   999 2018    0
2018-02-20 00:00:00.000 1   11683   0   999 2018    0
2018-02-21 00:00:00.000 1   11683   0   999 2018    0
2018-02-22 00:00:00.000 1   11683   0   999 2018    0
2018-02-23 00:00:00.000 1   11683   0   999 2018    0
2018-02-24 00:00:00.000 1   11683   1339    999 2018    0
2018-02-25 00:00:00.000 1   11683   81  999 2018    0
2018-02-26 00:00:00.000 1   11683   487 999 2018    0
2018-02-27 00:00:00.000 1   11683   861 999 2018    0
2018-02-28 00:00:00.000 1   11683   546 999 2018    0
2018-03-01 00:00:00.000 1   11683   722 999 2018    0
2018-03-02 00:00:00.000 1   11683   890 999 2018    0
2018-03-03 00:00:00.000 1   11683   1128    999 2018    0
2018-03-04 00:00:00.000 1   11683   81  999 2018    0
2018-03-05 00:00:00.000 1   11683   884 999 2018    0
2018-03-06 00:00:00.000 1   11683   3675    999 2018    0
2018-03-07 00:00:00.000 1   11683   3780    999 2018    0
2018-03-08 00:00:00.000 1   11683   3178    999 2018    0
2018-03-09 00:00:00.000 1   11683   1749    999 2018    0
2018-03-10 00:00:00.000 1   11683   1243    999 2018    0

этот пласт имеет коэффициент = 0,75 это идет к mytab1

и этот слой

Dt  CustomerName    ItemRelation    SaleCount   DocumentNum DocumentYear    IsPromo
2018-02-19 00:00:00.000 2   11684   0   999 2018    0
2018-02-20 00:00:00.000 2   11684   0   999 2018    0
2018-02-21 00:00:00.000 2   11684   0   999 2018    0
2018-02-22 00:00:00.000 2   11684   0   999 2018    0
2018-02-23 00:00:00.000 2   11684   0   999 2018    0
2018-02-24 00:00:00.000 2   11684   1339    999 2018    0
2018-02-25 00:00:00.000 2   11684   81  999 2018    0
2018-02-26 00:00:00.000 2   11684   487 999 2018    0
2018-02-27 00:00:00.000 2   11684   861 999 2018    0
2018-02-28 00:00:00.000 2   11684   546 999 2018    0
2018-03-01 00:00:00.000 2   11684   722 999 2018    0

имеет цифру 0,545454545 11 дней по нулевой категории испромо и 6 день был с ненулевыми акциями по количеству продаж.

1 Ответ

0 голосов
/ 05 июля 2018

Простой метод использует avg() с group by:

select CustomerName, ItemRelation, DocumentYear,
       avg( case when IsPromo > 0 then 1.0 end) as promo_ratio
from action.dbo.fc
group by CustomerName, ItemRelation, DocumentYear;

Затем вы можете использовать having avg( case when IsPromo > 0 then 1.0 end) > 0.71 для фильтрации.

...