我正在尝试编写一个查询,该查询将为我提供一次发生的交易金额总和。问题是,当我在查询中添加列日期时,我得到的是单个值而不是它们的总和。此查询的要求是每个商人都有一个条目,但我要为一个商人获得多行。
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
我的查询输出:
我希望每个商人在一天中获得一个条目,其交易金额之和,而不是当天的多行交易。
答案 0 :(得分:1)
您可以在不同的内部查询中以截短的日期计算总金额,并将其与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 );
祝你好运!
答案 1 :(得分:0)
t.transactiondate列可能包含日期和时间值。在仅使用t.transactiondate的地方使用TRUNC(t.transactiondate)。您将获得每个商人的“交易量”“日期”。
OR
根据WHERE子句中的“日期”值过滤出行,以检索与特定日期有关的数据。
答案 2 :(得分:0)
原因可能是您在m.MERCHANTLASTNAME
子句中同时包含了SUBSTR(m.MERCHANTLASTNAME,1,36)
和group by
。
如果某些条目具有相同的SUBSTR(m.MERCHANTLASTNAME,1,36)
但不同的m.MERCHANTLASTNAME
,则将产生重复项。您需要从m.MERCHANTLASTNAME
子句中删除group by