2017-02-13 7 views
3

Моего столаВставка в таблицу несколько строк, равно количество открытых строк, если есть больше, чем 15 из них

id sum type 
1  3  -1 
1  6  -1  
1  -6  2 
1  -3  1 
1  3  -1 
1  6  -1 

These

1  3  -1 

открытые ряды. Тип всегда -1. сумма может быть разной.

Эти

1  -6  2 

замкнутые строки. Тип! = -1. сумма = -сумма для открытой строки

эти строки

1  3  -1 
1  6  -1  
1  -6  2 
1  -3  1 

будет отрицать друг друга. Они

1  3  -1 
1  6  -1 

Остается. Если число открытых строк, в конце концов больше, чем 15, то для каждой открытой строки мне нужно вставить в таблицу строку, в которой сумма -сумма открытой строки и типа 2.

Группировка

select id 
, sum 
, sum(
    case 
    when type = -1 then 1 
    when type != -1 then -1 
    else 0 
    end 
) as num 
from table 
group by id, sum 

    id sum num 
    1  3  2 
    1  6  2  
    1  -6  2 
    1  -3  1 

может помочь мне найти комбинации. Но я не знаю, что делать после.

ответ

1
select  t.val_id 
      ,t.val_sum 
      ,2   as val_type 

from  (select  val_id 
         ,-abs (val_sum)         as val_sum 
         ,sum (case when val_type = -1 then 1 else -1 end) as occurrences 

      from  mytable 

      group by val_id 
         ,abs (val_sum) 

      having  sum (case when val_type = -1 then 1 else -1 end) > 15 
      ) t 
      lateral view explode (split (space (cast (occurrences as int) - 1),' ')) e 
;