Группировать по две или более записи в одну запись - PullRequest
0 голосов
/ 17 декабря 2018

Я изо всех сил пытаюсь придумать элегантный способ сделать эту группировку.Вот некоторые примеры данных… Я не могу придумать что-то (это не совсем запутано)

Create table tax(Prod_ID varchar(15), Authority varchar(15), Rate     decimal(15,10)) 
insert into tax(prod_id, Authority, rate) 
VALUES
('UNL',       'TX',  0.20000000000000000000000), 
('UNL',       'USA', 0.18300000000000000000000), 
('UNL',       'USA', 0.00100000000000000000000), 
('UNL',       'TX',  0.00099285714285714285714), 
('UNL',       'AL',  0.18000000000000000000000)

Любая запись с «Полномочиями» в «США» должна быть добавлена ​​в КАЖДУЮ «Полномочия»это состояние, например, TX, AL, FL и т. д. Итак, что я хотел бы получить из приведенных выше данных, так это:

Prod_ID, Authority, Sum(Rate)
UNL, TX, 0.38499285714285714285714
UNL, AL, 0.36400000000000000000000

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Я думаю, вы ищете что-то вроде этого

select t.prod_id 'Prod_ID', t.authority 'Authority',
        (SUM(Rate) +(SELECT SUM(RATE) FROM tax t where Authority = 'USA'))  as 'Sum(Rate)'
from tax t 
WHERE Authority <> 'USA'
GROUP BY Prod_ID,Authority 
0 голосов
/ 17 декабря 2018

Хммм.,,Я думаю, что JOIN достаточно:

with t as (
      select t.prod_id, t.authority, sum(t.rate) as rate
      from tax t
      group by t.prod_id, t.authority
     )   
select t.prod_id, t.authority,
       (t.rate + coalesce(tusa.rate, 0)) as total_rate
from t left join
     t tusa
     on t.prod_id = tusa.prod_id and tusa.authority = 'USA'
where t.authority <> 'USA'
...