2016-03-10 2 views
0

У меня есть таблица, в которой есть клиенты, перечисленные каждый месяц с и active_indicator. Для каждого клиента я хочу вытащить активный индикатор всего на два месяца (декабрь 2014 года и декабрь 2015 года), но когда я пишу приведенный ниже код, я получаю таблицу, в которой каждый клиент указан дважды. Я знаю, что могу сделать еще один шаг, чтобы свернуть таблицу на уровень клиента с помощью max, но все равно сделать это в одном простом SQL-запросе?Как написать этот SQL без дублирования клиента?

select distinct 
    customer 
    ,case when date='2015-12-01' then active_indicator else 0 end as Dec2015_active_ind 
    ,case when date='2014-12-01' then active_indicator else 0 end as Dec2014_active_ind 
from monthly_account_cust 
where date in ('2015-12-01', '2014-12-01') 
order by customer 
+0

Использованы теги dbms (MySQL или MS SQL Server?). Тип данных для столбца «дата»? – jarlh

+0

Если вы не суммируете это, вы получите две строки, предполагающие наличие двух строк, соответствующих критериям даты. –

ответ

5

Совершенно очевидно, что вы ищете что-то вроде этого.

select 
    customer 
    , max(case when date = '2015-12-01' then active_indicator else 0 end) as Dec2015_active_ind 
    , max(case when date = '2014-12-01' then active_indicator else 0 end) as Dec2014_active_ind 
from monthly_account_cust 
where date in ('2015-12-01','2014-12-01') 
group by customer 
order by customer 
+0

И я уверен, что ты прав! – jarlh

+0

Хммм, да, я должен был это попробовать. Благодаря! –

+1

Если это работает для вас, тогда вы должны подумать о принятии этого в качестве ответа. –

Смежные вопросы