2010-09-06 70 views
0

我有以下SQL查询结合联盟导致

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

'计数(Record_Entry) '应该是'Count(emailId)'我想。 – 2010-09-06 04:39:02

+0

感谢格式 – Jamie 2010-09-06 20:36:53

回答

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

基本上最简单的方法是让你的联合派生表或CTE,然后按日期分组。

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

保持联合在一起码到最低限度:

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) 

编辑:添加别名子查询

+0

谢谢,但我得到一个“错误的语法靠近关键字'组'”错误 – Jamie 2010-09-06 20:26:21

+0

@Jamie:现在试试。 – 2010-09-07 06:19:11