2011-05-20 47 views
0

我的做法是:SQL程序选择合并

create procedure "news" 
as 
select newsdate,COUNT(B.id) as total from news B 
where B.newsyear < GETDATE() 
Group by B.newsdate 

select newsdate,COUNT(B.id) as total from news B 
where B.status='WAITING' and B.cancel='1' 
Group by B.newsdate 

结果:

newsdate total 
2011  4 
2010  8 

newsdate total 
2011  2 
2010  3 

如何合并一年总计获得这个结果集:

newsdate total 
2011  6  {4 + 2} 
2010  11  {8 + 3} 

回答

0

使用简单或声明(如果它确实是同一个表):

select newsdate,COUNT(B.id) as total 
from news B 
where B.newsyear < GETDATE() 
    or B.status='WAITING' and B.cancel='1' 
Group by B.newsdate 

,或者使用UNION ALL + Sum聚集(如果它是不同的表):

select newsdate, sum(total) as total from (
    select newsdate,COUNT(B.id) as total from news B where B.newsyear < GETDATE() 
    Group by B.newsdate 
    union all 
    select newsdate,COUNT(B.id) as total from news B where B.status='WAITING' and B.cancel='1' 
    Group by B.newsdate 
) as rows 
group by newsdate 
+0

谢谢工会的所有工作。 – bulent 2011-05-20 13:32:47

1

试试这个:

select newsdate,COUNT(B.id) as total 
from news B 
where (B.newsyear < GETDATE()) 
or (B.status='WAITING' and B.cancel='1') 
Group by B.newsdate