Объединить две строки в одну строку с одним столбцом, имеющим разные значения - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть два события одного и того же exp_seek_id, основанные на столбце с именем за границей, который имеет значение «Y» или «N».Я подсчитал сумму всего зарубежного опыта и сумму всего внутреннего опыта.До сих пор я успешно получил вышеуказанные результаты, но получаю два ряда одного и того же ПК.Возможно ли получить оба опыта (за границей и внутри страны) в один ряд?

Пока я получаю это:

EXP_SEEK_ID | Experience | Abroad
      146           7        Y
      146           3        N

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

EXP_SEEK_ID | Abroad | Domestic
      146           7      3

Мой код:

Select exp_seek_id ,experience,
SUM( extract (year from exp_date_to)- extract (year from exp_date_from) )
From 
job_seek_experience where 
exp_seek_id = 146
Group By 
exp_seek_id,experience

Ответы [ 3 ]

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

Обычный способ сделать это - объединить SUM + DECODE, например,

SQL> with job_seek_experience
  2    (exp_seek_id, experience, abroad) as
  3    (select 146, 1, 'Y' from dual union all
  4     select 146, 6, 'Y' from dual union all
  5     select 146, 3, 'N' from dual union all
  6     --
  7     select 222, 4, 'Y' from dual
  8    )
  9  select exp_seek_id,
 10         sum(decode(abroad, 'Y', experience)) abroad,
 11         sum(decode(abroad, 'N', experience)) domestic
 12  from job_seek_experience
 13  where exp_Seek_id = 146
 14  group by exp_Seek_id;

EXP_SEEK_ID     ABROAD   DOMESTIC
----------- ---------- ----------
        146          7          3

SQL>

интересная часть для вас - строки 9-14 (CTE isn 'неужели это интересно?).

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

использовать DECODE () так просто

drop table omc.test;
create table omc.test (
EXP_SEEK_ID  NUMBER(5),
Experience  NUMBER ( 3) , 
Abroad  CHAR(1) 
); 

insert into omc.test values ( 146, 7, 'Y' ) ;
insert into omc.test values ( 146, 3, 'N' ) ;

commit;

select EXP_SEEK_ID,  SUM(decode( Abroad,'Y',Experience))  Abroad  , SUM( decode( Abroad,'N',Experience))  Domestic
FROM omc.test
group by EXP_SEEK_ID

EXP_SEEK_ID ЗА РУБЕЖОМ


    146          7          3
0 голосов
/ 26 декабря 2018

Я приму ваш окончательный результат в качестве ввода, но вам будет легко изменить сценарий для вашей ситуации.

create table exp_table
(exp_seek_id number, experience number, abroad char);

insert into exp_table
values(146, 7, 'Y');
insert into exp_table
values(146, 3, 'N');



with abroad_exp as
        (select exp_seek_id, 
                experience, 
                abroad 
         from exp_table
         where abroad = 'Y'),
     domestic_exp as
        (select exp_seek_id, 
                experience, 
                abroad  
         from exp_table
         where abroad = 'N')
select /*+ parallel */
  abroad_exp.exp_seek_id,
  abroad_exp.experience as abroad,
  domestic_exp.experience as domestic
from abroad_exp,
     domestic_exp
where abroad_exp.exp_seek_id = domestic_exp.exp_seek_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...