Saleem Mohammad Ответов: 1

Как я могу получить только дебиторами и кредиторами управляемых с action_type ДР и ПР


Я создал балансовую систему с помощью PHP MYSQLi. Где администратор может управлять информацией об учетной записи клиента. Теперь я хочу получить только ДОЛЖНИКИ и только КРЕДИТОРЫ. Я управляю обеими записями, используя поле action_type 'dr' или 'cr'.

Ниже приведен URL-адрес SQLFiddle:

Попробовал SQL:
Только Должники: http://www.sqlfiddle.com/#!9/badc3f/26
Только Кредитор: http://www.sqlfiddle.com/#!9/badc3f/27

Проблема с получением результатов группировка по area_id
URL-АДРЕС: http://www.sqlfiddle.com/#!9/badc3f/31

Что я уже пробовал:

Получают Только Должники:

SELECT client_id, 
       area_id, 
       SUM(CASE WHEN action_type='dr' 
                THEN amount END) total_debits,
       SUM(CASE WHEN action_type='cr' 
                THEN amount END) total_credits,
       SUM(CASE WHEN action_type='cr' 
                THEN amount END) - SUM(CASE WHEN action_type='dr' 
                                            THEN amount END) total_debtors,
       CASE WHEN SUM(CASE WHEN action_type='cr' 
                          THEN amount END) - SUM(CASE WHEN action_type='dr' 
                                                      THEN amount END) > 0 
            THEN 'dr' 
            ELSE 'cr' END balance
FROM tbl_balancesheet
GROUP BY client_id, 
         area_id
         HAVING balance = 'dr'


Получить только кредиторов:

SELECT client_id, 
       area_id, 
       SUM(CASE WHEN action_type='dr' 
                THEN amount END) total_debits,
       SUM(CASE WHEN action_type='cr' 
                THEN amount END) total_credits,
       SUM(CASE WHEN action_type='cr' 
                THEN amount END) - SUM(CASE WHEN action_type='dr' 
                                            THEN amount END) total_debtors,
       CASE WHEN SUM(CASE WHEN action_type='cr' 
                          THEN amount END) - SUM(CASE WHEN action_type='dr' 
                                                      THEN amount END) > 0 
            THEN 'dr' 
            ELSE 'cr' END balance
FROM tbl_balancesheet
GROUP BY client_id, 
         area_id
         HAVING balance = 'cr'


Как вы можете видеть выше, оба запроса работают нормально. Но моя главная проблема с area_id. Когда я использую
GROUP BY area_id
одна запись кредитора отсутствует в запросе результата единственного кредитора.

Пожалуйста, помогите нам.

Спасибо.

1 Ответов

Рейтинг:
1

Gerry Schmitz

Если кредиты превышают дебеты, то у вас есть "кредитный баланс".

Ваш код говорит обратное:

WHEN SUM(CASE WHEN action_type='cr' 
                          THEN amount END) - SUM(CASE WHEN action_type='dr' 
                                                      THEN amount END) > 0 
            THEN 'dr' 
            ELSE 'cr' END balance