2015-12-03 1 views
1

У меня есть два подзапроса, один возвращает набор данных и суммирует один из столбцов в группе, а другой делает то же самое, но с условием, что дата утверждения не является 't null. Два затем присоединились и выбраны из, чтобы получить результат, как этот:SQL Return Zero для суммированного столбца в группе подзапросов

ID - Requested - Approved

Если я бегу это прямо сейчас, она возвращает что-то вроде 1 - 2 - NULL, потому что запись I» m, не одобрен. Когда это так, я хочу, чтобы столбец «Approved» отображал 0, а не «NULL». Я достаточно новый для сложных запросов, и я не уверен, как это сделать, но я уверен, что это возможно.

Это, кстати, с MS SQL-сервером, поэтому T-SQL и тому подобное прекрасно, если это упростит.

Вот запрос, как сейчас:

select sr.ItemID, Requested, Approved from 

(select sri.ItemID, Requested = sum(sri.Quantity) from SupplyRequestItem as sri inner join 
SupplyRequest as sr on sr.ID = sri.RequestID 
group by sri.ItemID) as sr left outer join 

(select sri.ItemID, Approved = sum(sri.Quantity) from SupplyRequestItem as sri inner join 
SupplyRequest as sr on sr.ID = sri.RequestID 
where sr.ApprovedDate is not null 
group by sri.ItemID) as asr on sr.ItemID = asr.ItemID 
+0

Вот отличное место для начала. http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/ –

ответ

3

Вы можете использовать условную агрегацию, чтобы сделать это более простым способом. измените выражения case в соответствии с вашими потребностями.

select sri.ItemID, 
Requested = sum(case when sr.ApprovedDate is null then sri.Quantity else 0 end), 
Approved = sum(case when sr.ApprovedDate is not null then sri.Quantity else 0 end) 
from SupplyRequestItem as sri 
inner join SupplyRequest as sr on sr.ID = sri.RequestID 
group by sri.ItemID 
+0

Я пробормотал с заявлениями о делах для этого, но пытался их поместить вне вызова sum(). Это гораздо более элегантно, чем то, что я делал раньше, спасибо! – Yushatak

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