Я работаю над сложным SQL-запросом. Просто для объяснения цели моей проблемы я сократил ниже короткий запрос:
select a.column1 as field1,b.column2 as field 2,c.column3 as field3,COALESCE(SUM(d.paid_amt) OVER (PARTITION BY a.some_column),0) as amount_paid
from a Inner join b on b.column3=ac.olumn2
right join c on c.column4=b.column1
left join d on d.column2=a.column1 and d.column5 = a.column1
where ...//some conditions
Так что я совершенно уверен, что здесь происходит. Я больше обеспокоен последним левым соединением на столе d. если в таблице d нет записей, соответствующих d.column5 = a.column1
, то я не получаю никаких результатов.
Но я пытаюсь написать запрос таким образом, чтобы, если d-таблица повторяет какие-либо значения с условием where d.column5 = a.column1
, тогда я хочу использовать эти значения, иначе, если в d-таблице нет записей, я просто хочу получить записи из результатов предыдущих объединений и получить нужные мне записи.
Здесь с текущим запросом проблема, как и ожидалось, если соединение не соответствует условию where, то все записи удаляются. Я хочу иметь записи независимо от того, удовлетворяет ли условие where или нет.
Я не совсем уверен, как это сделать в одном запросе. Любые предложения приветствуются.
Примечание: @scaisEdge и @Zaynul Answer работают отлично. но проблема заключается в вычислении суммы, если я перемещаю условие в строке при соединении и предложении. Расчет суммы также должен выполняться при том же условии d.column5 = a.column1
. Так что я не совсем уверен, как это преодолеть: (
Пример даты ниже:
field1 | field2 | field3 | ampount_paid | some_column_to_match
--------------------------------------------------------------
name | value1 | other1 | 100 | 1
name1 | value2 | other2 | 100 | 1
name2 | value3 | other3 | 100 | 2
Итак, я только что добавил последние столбцы, чтобы объяснить, как я хочу получить сумму. Я хочу суммировать поля только в случае совпадения some_column_to_match
. Поэтому я пытаюсь получить вывод как:
field1 | field2 | field3 | amount_paid | some_column_to_match
--------------------------------------------------------------
name | value1 | other1 | 200 | 1
name1 | value2 | other2 | 200 | 1
name2 | value3 | other3 | 100 | 2
Таким образом, в общем случае вычисление должно быть суммой всех значений в amount_paid
, где значение some_column_to_match
совпадает. Таким образом, в приведенном выше примере первые два столбца должны возвращать 200, как 100 в каждом отдельном поле для одного и того же значения.