#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