СУММА две колонки с где, группа и наличие - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть две таблицы.Один из них называется Documents, а другой - Payments. Я хочу иметь возможность Group всех строк на Documents.InvoiceNumber, и я хочу иметь возможность SUM всех записей из Payments, имеющих одинаковые *От 1007 * до Mode.

Например, в Documents у меня есть эти строки:

---------------------------------
|ID      |Acct  |InvoiceNumber  |
---------------------------------
|27509   |68213 |0000024383     |
---------------------------------
|27508   |68396 |0000024383     |
---------------------------------
|27507   |68418 |0000024382     |
---------------------------------

А в Payments у меня есть эти строки:

------------------------------------
|ID     |Acct  |OperType|Qtty |Mode|
------------------------------------
|156396 |68396 |2       |43.89|1   |
------------------------------------
|156389 |68418 |2       |36.96|1   |
------------------------------------
|156314 |68418 |2       |36.96|-1  |
------------------------------------
|156265 |68213 |2       |52.25|1   |
------------------------------------
|156264 |68396 |2       |43.89|-1  |
------------------------------------
|155895 |68213 |2       |52.25|-1  |
------------------------------------

Я хочу иметь возможность проверить, если

InvoiceNumber -> Payments.Mode = -1 -> SUM (Qtty) равно InvoiceNumber -> Payments.Mode = 1 -> SUM (Qtty)

Например:

Invoice Number = 0000024383 | Mode = -1 | Qtty = 96.14
Invoice Number = 0000024383 | Mode =  1 | Qtty = 96.14

И я хочу иметь возможность проверять в выражении mysql, являются ли эти два одинаковыми или нет, и я хочу иметь возможностьвыводить только те записи, которые НЕ совпадают.

1 Ответ

0 голосов
/ 12 февраля 2019

Если я следил за вами правильно, вы сможете решить эту проблему, используя условное агрегирование :

SELECT 
    d.invoicenumber,
    SUM(CASE WHEN p.mode = -1 THEN p.qtty ELSE 0 END) qtty_minus1,
    SUM(CASE WHEN p.mode = 1 THEN p.qtty ELSE 0 END) qtty1
FROM 
    Documents d
    INNER JOIN Payments p ON p.acct = d.acct
GROUP BY 
    d.invoicenumber
HAVING 
    SUM(CASE WHEN p.mode = -1 THEN p.qtty ELSE 0 END) 
    <> SUM(CASE WHEN p.mode = 1 THEN p.qtty ELSE 0 END)

Запрос агрегирует записи по номеру счета, а затем сравнивает общее количествозаписи, где режим равен -1 к общему количеству записей, где режим равен 1.Предложение HAVING гарантирует, что в результатах отображаются только номера счетов-фактур, для которых общее количество отличается.

См. эту демонстрацию DB Fiddle : мне пришлось изменитьваши образцы данных, поскольку в них не было записей обидчиков.

| invoicenumber | qtty_minus1 | qtty1 |
| ------------- | ----------- | ----- |
| 0000024383    | 96.13       | 96.14 |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...