2017-01-05 7 views
0

Мой вопрос очень похож на один в прикрепленном сообщении, за исключением того, что мне нужно иметь предложение where в моем вопросе, относящемся к неделе из таблицы1. Моя таблица2 (t2) имеет только один столбец (имена) и столбцы даты/времени, а таблица1 (t1) имеет имя, продажи и неделю. Я хочу вернуть ноль для Шона, так как у него не было продаж за неделю, заканчивающуюся 01/01/2017.У меня есть ноль, если нет Продажи

Create a third table from two tables

select * from table2: 

Names 

Maggie 
Colleen 
Laura 
Sean 

select * from table1: 

Names    Sales    Week 
Maggie    1800     01/01/2017 
Colleen    2000     01/01/2017 
Laura    4000     01/01/2017 
Sean    1500     12/18/2016 

select t2.Name, coalesce(t1."Employee Sales",0) "Employee Sales" 
from emphis t2 left outer join 
(select Name, sum(Sales) "Employee Sales" 
from empdata 
group by Name) t1 
on t1.Name = t2.Name 

Names    Employee Sales    
Maggie    1800     
Colleen    2000     
Laura    4000     
Sean    1500     

Результат Ищу:

Names    Employee Sales    
Maggie    1800     
Colleen    2000     
Laura    4000     
Sean     0 

select t2.Name, coalesce(t1."Employee Sales",0) "Employee Sales" 
from emphis t2 left outer join 
(select Name, sum(Sales) "Employee Sales" 
from empdata 
group by Name) t1 
on t1.Name = t2.Name 
where t1.Week = date_trunc('week', now())::date - 1 

Ошибка в PostGreSQL:

ERROR: column t1.Week does not exist 
LINE 7: where t1.Week = date_trunc('week', now())::date - 1 

Я использую

where t1.Week = date_trunc('week', now())::date - 1 

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

+0

ход недели состояние к '' join' п .. на t1.Name = t2.Name и t1.Week = date_trunc ('week', now()) :: date - 1' –

ответ

2

Переместить условие «Неделя» в подвыборку. Это имеет два преимущества:

  1. Вы получите частичную сумму продаж за эту неделю, если у кого-то есть продажи в течение нескольких недель.
  2. Они будут отображаться в списке, если они не имеют продаж с $ 0

Как так:

select t2.Name, 
    coalesce(t1."Employee Sales",0) "Employee Sales" 
from emphis t2 
left outer join (
    select Name, 
     sum(Sales) "Employee Sales" 
    from empdata 
    where Week = date_trunc('week', now())::date - 1 
    group by Name 
    ) t1 
on t1.Name = t2.Name 
+0

Спасибо Ананду, работали как шарм !!! –

1

Да, это потому, что ваш подзапрос не содержит колонки Week, включенные или выбранные. Вы должны включить эту колонку так же, как

(select Name, sum(Sales) "Employee Sales", "Week" 
from empdata 
group by Name) t1 
on t1.Name = t2.Name 
where t1.Week = date_trunc('week', now())::date - 1 
+0

Thanks Rahul, Sean не появляется. Появляются только три других сотрудника с Sales. –

+0

@Jacob_Cortese, это в основном причина условия 'where'. проверьте и проверьте их. Более того, не понимаю, зачем вам 'sum()' или 'group by здесь – Rahul

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