2010-09-06 3 views
0

У меня есть ниже SQL QueryОбъединение Союза результаты

select Count(emailID) as ViewsThatMonth, 
     Day(entry_date) as day, 
     Month(entry_date) as month, 
     Year(entry_date) as year 
    from email_views 
    where emailID = 110197 
Group By Day(entry_date), Month(entry_date), Year(entry_date) 
UNION ALL 
    select Count(emailID) as ViewsThatMonth, 
     Day(Record_Entry) as day, 
     Month(Record_Entry) as month, 
     Year(Record_Entry) as year 
    from dbo.tblOnlineEmail_Views 
    where emailID = 110197 
Group By Day(Record_Entry), Month(Record_Entry), Year(Record_Entry) 
order by 4, 3, 2 

Результаты показывают, как показано ниже. Мне нужны результаты в ту же дату, которые нужно объединить. То есть общая для 23/8/2010 должно быть 800.

ViewsThatMonth day month year 
--------------------------------- 
799    23 8  2010 
1    23 8  2010 
281    24 8  2010 
88    25 8  2010 
1    25 8  2010 
+0

'Count (Record_Entry) 'должен быть' Count (emailId) 'Я думаю. – 2010-09-06 04:39:02

+0

Спасибо за форматирование – Jamie

ответ

1

Вам нужно только группе один раз:

SELECT Count(emailID) as ViewsThatMonth, 
     Day(entry_date) as day, 
     Month(entry_date) as month, 
     Year(entry_date) as year 
from(
select emailID, Record_Entry AS entry_date 
    from email_views 
    where emailID = 110197 
UNION ALL 
    select emailID, entry_date 
    from dbo.tblOnlineEmail_Views 
    where emailID = 110197 
) AS t 
Group By Day(entry_date), Month(entry_date), Year(entry_date) 
order by 4, 3, 2 
0

В принципе самый простой способ это сделать ваш союз производной таблицы или КТР, а затем сгруппировать их по дате.

IE.

select 
sum(dt.ViewsThatMonth) as ViewsThatMonth 
,dt.[day] 
,dt.[month] 
,dt.[year] 

from 
(select Count(emailID) as ViewsThatMonth, Day(entry_date) as day, Month(entry_date) as month, Year(entry_date) as year from email_views 
where emailID = 110197 
Group By Day(entry_date), Month(entry_date), Year(entry_date) 

UNION ALL 

select Count(Record_Entry) as ViewsThatMonth, Day(Record_Entry) as day, Month(Record_Entry) as month, Year(Record_Entry) as year from dbo.tblOnlineEmail_Views 
where emailID = 110197 
Group By Day(Record_Entry), Month(Record_Entry), Year(Record_Entry) 
) dt 

group by [day], [month], [year] 

order by dt.[year], dt.[month], dt.[day] 
0

Ведение UNIONed кода к минимуму:

select Count(emailID) as ViewsThatMonth, 
     Day(sort_date) as day, 
     Month(sort_date) as month, 
     Year(sort_date) as year 
    from (select v.*, 
      case c.caseid when 1 then entry_date else record_entry end sort_date 
      from email_views v 
      cross join (select 1 caseid union all select 2 caseid) c 
      where v.emailID = 110197) sq 
Group By Day(sort_date), Month(sort_date), Year(sort_date) 

EDIT: Добавлен псевдоним подзапрос

+0

Спасибо, но я получаю «Неправильный синтаксис рядом с ключевым словом« Группа »» error – Jamie

+0

@Jamie: попробуйте сейчас. –

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