Как получить сумму транзакции за одну дату? - PullRequest
1 голос
/ 05 июня 2019

Я пытаюсь написать запрос, который даст мне сумму транзакции за одну дату.Проблема в том, что когда я добавляю дату столбца в свой запрос, я получаю отдельные значения, а не их сумму.Требование для этого запроса - иметь одну запись для каждого продавца, но я получаю несколько строк для одного продавца.

SELECT SUBSTR(m.MERCHANTLASTNAME, 1, 36) Name1,                 

                                     m.MERCHANTBANKBSB MerchantAccbsb,                 

                                     m.MERCHANTBANKACCNR Merchant_act,                 

                                     m.MERCHANTID merchantid, 

                                     t.transactiondate date1,
                                     sum(t.TRANSACTIONAMOUNT) as total            

            FROM fss_merchant m 
            JOIN fss_terminal term 
            ON m.MERCHANTID = term.MERCHANTID                        
            JOIN FSS_DAILY_TRANSACTION t 
            ON term.TERMINALID = t.TERMINALID 
            group by t.transactiondate, SUBSTR(m.MERCHANTLASTNAME, 1, 36), m.MERCHANTID, m.MERCHANTBANKBSB, m.MERCHANTBANKACCNR, 
    m.MERCHANTLASTNAME 

Вывод моего запроса: here

Я хочу получитьодна запись на каждого продавца с суммой суммы транзакции за один день, а не с несколькими строками транзакции в этот день.

Ответы [ 3 ]

1 голос
/ 05 июня 2019

Вы можете вычислить общую сумму в другом внутреннем запросе с усеченной датой и объединить ее с таблицей FSS_MERCHANT, чтобы устранить проблемы, описанные @SatishSK и @mangusta.

Вы можете использовать следующий запрос:

SELECT
    SUBSTR(M.MERCHANTLASTNAME, 1, 36) NAME1,
    M.MERCHANTBANKBSB        MERCHANTACCBSB,
    M.MERCHANTBANKACCNR      MERCHANT_ACT,
    M.MERCHANTID             MERCHANTID,
    M_DATA.TRANSACTIONDATE   DATE1,
    M_DATA.TOTAL             AS TOTAL
FROM
    FSS_MERCHANT M
    INNER JOIN (
        SELECT
            TERM.MERCHANTID   MERCHANTID,
            TRUNC(T.TRANSACTIONDATE) TRANSACTIONDATE,
            SUM(T.TRANSACTIONAMOUNT) AS TOTAL
        FROM
            FSS_TERMINAL TERM
            JOIN FSS_DAILY_TRANSACTION T ON TERM.TERMINALID = T.TERMINALID
        GROUP BY
            TERM.MERCHANTID,
            TRUNC(T.TRANSACTIONDATE)
    ) M_DATA ON ( M.MERCHANTID = M_DATA.MERCHANTID );

Удачи !!

0 голосов
/ 05 июня 2019

Возможно, причина в том, что вы включили m.MERCHANTLASTNAME и SUBSTR(m.MERCHANTLASTNAME,1,36) в предложение group by.

В случае, если есть записи с одинаковыми SUBSTR(m.MERCHANTLASTNAME,1,36), но разными m.MERCHANTLASTNAME, это приведет к дубликатам. Вам необходимо удалить m.MERCHANTLASTNAME из group by пункта

0 голосов
/ 05 июня 2019

Столбец t.transactiondate может содержать значения даты + времени.Используйте TRUNC (t.transactiondate) там, где вы используете просто t.transactiondate.Вы получите сумму (сумму транзакции) «по дате» для каждого продавца.

ИЛИ

Отфильтруйте строки на основе значения «Дата» в предложении WHERE, чтобы получить данные, относящиеся к определенной дате,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...