Как построить запрос SQL, чтобы показать два столбца с разными диапазонами дат? - PullRequest
1 голос
/ 09 ноября 2011

Я пытаюсь создать запрос из базы данных Oracle 11g для использования в отчете. Мне нужно использовать две таблицы CONTACT и CONTACT_EXT, чтобы получить данные, и сравнить общее количество контактов за два диапазона дат. Таблицы объединяются по совпадению идентификатора.

CONTACT:

ID | DATE
----------
1   12/12/2010
2   12/11/2010
3   14/09/2011

CONTACT_EXT

 ID | TYPE
----------
1   MAIL
2   FAX
3   FAX  

Так, например, если я установлю период А между 01.01.2010 и 12.12.2010 и период В между 01.01.2011 и 11.11.2011

TYPE | PERIOD A | PERIOD B | TOTAL
MAIL   1          0          1
FAX    1          1          2

Ответы [ 3 ]

3 голосов
/ 09 ноября 2011
SQL> create table contact (id,cdate)
  2  as
  3  select 1, date '2010-12-12' from dual union all
  4  select 2, date '2010-11-12' from dual union all
  5  select 3, date '2011-09-14' from dual
  6  /

Table created.

SQL> create table contact_ext (id,type)
  2  as
  3  select 1, 'MAIL' from dual union all
  4  select 2, 'FAX' from dual union all
  5  select 3, 'FAX' from dual
  6  /

Table created.

SQL> select ce.type
  2       , count(case when c.cdate between date '2010-01-01' and date '2010-12-12' then 1 end) period_a
  3       , count(case when c.cdate between date '2011-01-01' and date '2011-11-11' then 1 end) period_b
  4       , count(*) total
  5    from contact c
  6         inner join contact_ext ce on (c.id = ce.id)
  7   group by ce.type
  8  /

TYPE   PERIOD_A   PERIOD_B      TOTAL
---- ---------- ---------- ----------
FAX           1          1          2
MAIL          1          0          1

2 rows selected.

С уважением,
Роб.

1 голос
/ 09 ноября 2011

Просто сделай сам присоединиться:

select type,period_a,period_b,period_a+period_b as total
from(
  select type,count(1) as period_a
  from contact_ext
  left join contact
  using(id)
  where date>='20100101' and date<='20101212'
  group by 1
)a
join(
  select type,count(1) as period_b
  from contact_ext
  left join contact
  using(id)
  where date>='20110101' and date<='20111111'
  group by 1
)b
using(type);
0 голосов
/ 09 ноября 2011

Ответ 1: В предложении where установлен период A между 01.01.2010 и 12.12.2010 ИЛИ период B в период с 01.01.2011 по 11.11.2011 В предложении where используется условие ИЛИ

Ответ 2: вы можете объединить два разных оператора выбора периода A и периода B

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...