2014-09-08 6 views
0

Правых, мой сценарий таков: У меня есть 3 таблицы (финансы, CommonCosts, OtherCosts)SQL Server -Добавление значения между таблицами

  • CommonCosts всегда содержат 5 полей
  • OtherCosts не может содержать ни одного чтобы многие

Всего рассчитает поля, основанные на FinanceID

моя проблема заключается в следующем:

с помощью SQL-запроса ниже, если я не имею поле в OtherApplications то OverallTotal не будет отображаться в окне я использую ...

SELECT 
sum(ProjectFinances.PFTotal+ OtherApplications.OTotal)AppTotal 
from ProjectFinances 
inner join OtherApplications on ProjectFinances.FinanceID = OtherApplications.FinanceID 
group by ProjectFinances.FinanceID 

приведенный ниже пример показывает проблему, есть ли способ решить это легко? его в основном тот факт, что не существует никакого значения в таблице OtherApplications добавить поэтому оно не беспокоить его отображения, я хочу, чтобы добавить 0, если оно не существует ... спасибо, ребята

enter image description here

ответ

2

Функция SUM является используется для добавления значений в пределах одного столбца. Если вы хотите добавить два разных столбца, просто удалите ссылку SUM(). Кроме того, если это возможно, нет никакого значения в OtherApplications, вы должны использовать внешнее соединение и заменить NULL с 0. Соберем все вместе и у вас есть:

SELECT 
ProjectFinances.PFTotal + ISNULL(OtherApplications.OTotal, 0) as AppTotal 
from ProjectFinances 
left outer join OtherApplications on ProjectFinances.FinanceID = OtherApplications.FinanceID 

Inner против OUTER JOIN

Внутреннее соединение будет показывать значения только в том случае, если в таблице справа есть строка, соответствующая значению в левой таблице для условия соединения. В вашем случае это означает, что вы получите результат только в том случае, если в таблице OtherApplications есть строка с тем же значением для FinanceID, что и строка в таблице ProjectFinances.

Внешнее соединение отображает значения для обеих или обеих таблиц в зависимости от типа внешнего соединения, которое вы используете, а также совпадающих строк для другой стороны соединения (иначе NULL). Для LEFT внешнего соединения будут показаны все значения из таблицы LEFT, а также соответствующее значение из таблицы справа, если условие соединения выполнено или NULL в противном случае. Правильное внешнее соединение аналогично - за исключением того, что мы ожидаем увидеть все значения из таблицы справа и как соответствующее значение из таблицы слева, если условие соединения выполнено или NULL в противном случае. В вашем случае боковой стол LEFT - ProjectFinances, а RIGHT side table - OtherApplications. Последний тип внешнего соединения называется FULL внешним соединением, и он в основном даст вам четкое объединение LEFT внешнего соединения и RIGHT внешнего соединения. Другими словами, он предоставит вам все строки из ProjectFinances и OtherApplications, показывая совпадающие значения, если условие соединения выполнено или NULL в противном случае на каждой соответствующей стороне соединения.

+0

все еще только отображающий 2 значения на своем собственном, спасибо за помощь – Crezzer7

+0

Я обновил свой ответ. –

+0

блестящий thankyou :) могу ли я просто спросить разницу между внутренним соединением и левым соединением/левым внешним соединением? плохо принимаю ответ, когда он позволяет мне – Crezzer7

0

попробовать этот (непроверенные):

SELECT 
    SUM(ISNULL(ProjectFinances.PFTotal,0)+ ISNULL(OtherApplications.OTotal,0))AppTotal 
    from ProjectFinances 
    inner join OtherApplications on ProjectFinances.FinanceID = OtherApplications.FinanceID 
    group by ProjectFinances.FinanceID 

PS: Если есть valueits добавляется, если еще его дает 0, как вы просили я не действительно знаю, что вы пытаетесь сделать здесь, но тот что вы просили;) hopr это помогает.

+0

это требует, чтобы и PFTotal, и OTotal были включены в предложение группы, когда я добавил, что в, только 2 результата отображаются снова, спасибо за помощь – Crezzer7

+0

, вы являетесь welcom, но можете ли вы объяснить, в чем проблема, поэтому я могу вам помочь ? – Youness

+0

ответ выше работал, в основном он не отображал значения, когда не было добавленной стоимости в OtheApplications под уникальным FinanceID, вместо того, чтобы показывать 100 + (0 или null), он оставил его – Crezzer7

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