Процедура SQL для выбора слияния

#sql #procedures

#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}
  

Ответ №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
  

Ответ №2:

используя простой оператор or (если это действительно одна и та же таблица):

 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
  

или с использованием объединения всех агрегированной суммы (если это разные таблицы):

 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