2017-02-22 59 views
-2

Мне нужна помощь. У меня есть код ниже, который отлично работает, но не достигает моей цели. Мне нужен столбец «account_title» с каждым из его вычисленных значений стороной перед вычитанием, которая должна в конечном итоге дать мне разницу вычитаемого значения. Спасибо в ожидании.Арифметические операторы с предложением SELECT, LEFT JOIN и WHERE

SELECT 
(
    SELECT SUM(amount) 
    FROM mainaccount_a_2017 
    LEFT JOIN chart_of_account ON (chart_of_account.joint_account_numbers = mainaccount_a_2017.joint_account_number) 
    LEFT JOIN asset_liability_income_expenditure_tbl ON (asset_liability_income_expenditure_tbl.a_l_code = chart_of_account.account_type) 
    WHERE a_l_code = 'FA' AND dr_cr_action = 'DR' 
) 
- 
(
    SELECT SUM(amount) 
    FROM mainaccount_b_2017 
    LEFT JOIN chart_of_account ON (chart_of_account.joint_account_numbers = mainaccount_b_2017.joint_account_number) 
    LEFT JOIN asset_liability_income_expenditure_tbl ON (asset_liability_income_expenditure_tbl.a_l_code = chart_of_account.account_type) 
    WHERE a_l_code = 'FA' AND dr_cr_action = 'CR' 
) 
+1

ты кричишь НА НАС? Здесь не обязательно вводить свой вопрос во ВСЕХ CAPS. Это затрудняет чтение текста, это грубо, и вам не поможет быстрее. Посмотрите на список вопросов на главной странице - сколько вы видите во ВСЕХ CAPS помимо своих? Ответ: Нет, потому что это неправильно. Пожалуйста остановись. –

+0

Откуда взялось название учетной записи? Вы не группируете запросы по учетной записи. – Barmar

+2

См. Http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql- query – Strawberry

ответ

0

Изменить подзапросы быть сгруппированы по account_title, а затем присоединиться к ним.

SELECT debits.account_title, debits.total - credits.total AS net_reduction 
FROM (
    SELECT mainaccount_a_2017.account_title, SUM(amount) AS total 
    FROM mainaccount_a_2017 
    LEFT JOIN chart_of_account ON (chart_of_account.joint_account_numbers = mainaccount_a_2017.joint_account_number) 
    LEFT JOIN asset_liability_income_expenditure_tbl ON (asset_liability_income_expenditure_tbl.a_l_code = chart_of_account.account_type) 
    WHERE a_l_code = 'FA' AND dr_cr_action = 'DR' 
    GROUP BY mainaccount_a_2017.account_title 
) AS debits 
JOIN (
    SELECT mainaccount_b_2017.account_title, SUM(amount) AS total 
    FROM mainaccount_b_2017 
    LEFT JOIN chart_of_account ON (chart_of_account.joint_account_numbers = mainaccount_b_2017.joint_account_number) 
    LEFT JOIN asset_liability_income_expenditure_tbl ON (asset_liability_income_expenditure_tbl.a_l_code = chart_of_account.account_type) 
    WHERE a_l_code = 'FA' AND dr_cr_action = 'CR' 
    GROUP BY mainaccount_b_2017.account_title 
) AS credits ON debits.account_title = credits.account_title 

DEMO

+0

Спасибо за это, но я получил это сообщение об ошибке неоднозначности '# 1052 - Столбец 'account_title' в списке полей неоднозначен'. Я связал account_title и перевернул кое-что. Я думаю, что вы сделали очень близко, я чувствую это, но я еще не там ... –

+0

Это означает, что у вас есть 'account_title' в других таблицах, поэтому вам нужен префикс таблицы. Я обновил ответ, чтобы показать это. – Barmar

+0

Если у вас есть название учетной записи в других таблицах, это плохая нормализация. Он должен находиться только в списке учетных записей. – Barmar