Пользовательские агрегаты в SQL - PullRequest
0 голосов
/ 09 мая 2018

У меня есть таблица с именем индустрия. Есть 6 полей. Схема приведена ниже.

В этом случае мне нужно выполнить пользовательские агрегации. В базе 22 области. Необходимо сделать два пользовательских агрегата:

  1. Области 1-17 необходимо объединить в новую область со значением 00.
  2. Области 20 и 21 необходимо преобразовать в другое со значением кода 99.

Далее моя попытка создать общую основу для этого. Я предполагаю, что создание новой таблицы - самый простой способ принять это. Внизу очень короткий пример предполагаемого результата.

 create table industry2
 (
 year char(4),
 qtr char(2),
 area char(6),
 industry char(3),
 ownership char(2),
 employment numeric(8,0)
 );

 INSERT INTO Industry2
 (year, qtr, area, industry, ownership, employment)
 SELECT year, qtr, area, (select sum (employment) from dbo.industry where area 
 = '01' or area = '02' and so on):

 2017    01    01   123000    1    456
 2017    01    02   123000    1    101
 2017    01    03   123000    1    103
 2017    01    01   134000    1      6
 2017    01    02   134000    1      7
 2017    01    03   134000    1     12
 2017    01    09   134000    1      1
 2017    01    01   144000    1     14
 2017    01    20   134000    1      7
 2017    01    21   134000    1      8

Ожидаемый результат

 2017   01     00   123000    1    660
 2017   01     00   134000    1     26
 2017   01     00   144000    1     14
 2017   01     99   134000    1     15

1 Ответ

0 голосов
/ 15 мая 2018

Вы можете определить свое пользовательское предложение GROUP BY с помощью оператора CASE WHEN:

select  [year], 
        [qtr],
        case when [area] in('20','21') then '99' when [area] between 1 and 17 then '00' end as [area], 
        [industry], 
        [ownership], 
        sum([employment]) as [employment_sum] 
from industry2 
group by  
    [year], 
    [qtr], 
    case when [area] in('20','21') then '99' when [area] between 1 and 17 then '00' end, 
    [industry], 
    [ownership] 

Результат:

enter image description here

...