我正在努力解决我的问题,对不起任何困惑。我有3个表与每次购买相关联:交易; TransactionEntry,包括事务中每个项目的单独行;和TaxEntry,包括TransactionEntry中每个条目的taxID和taxAmount。
我想通过TaxID找到每个TaxAmount AND价格在给定月份的总数。价格和日期在交易条目中找到,而TaxAmount和TaxID在TaxEntry中找到。此外,我们每个项目(州和县)有多个税。
我的表看起来像这样:
交易条目:
TransactionNum Price Date
1 8.99 2015-01-06
1 3.65 2015-01-06
2 3.99 2015-03-06
TaxEntry:
TransactionNum TaxID TaxAmount
1 2 0.89
1 16 0.09
1 2 0.37
1 16 0.04
2 4 0.40
2 16 0.04
我希望找到给定月份的TaxID之和的总和。所以,例如,我想要TaxID 2返回8.99 + 3.65; TaxID 4为3.99,TaxID为16.99 + 3.65 + 3.99.我尝试的所有内容都返回错误的金额,重复多次。
我的代码是:
SELECT SUM(Price), TaxID
FROM TaxEntry XE
JOIN TransactionEntry TE
ON XE.TransactionNumber = TE.TransactionNumber
WHERE CAST(TE.TransactionTime AS DATE) BETWEEN '06-01-2015' and '06-30-2015'
GROUP BY XE.TaxID
我的结果是最多三倍的范围。
我尝试了各种类型的连接,但它仍然重复信息。我觉得我应该用DISTINCT做一些事情,但它无法完成任何事情。
答案 0 :(得分:1)
如果您预先汇总税表,您将获得正确的结果:
SELECT XE.Price, TE.TaxID
FROM (SELECT TransactionNumber, SUM(Price) as Price
FROM TaxEntry XE
) XE JOIN
(SELECT TransactionNumber, TaxID
FROM TransactionNum TE
GROUP BY TransactionNumber
) TE
ON XE.TransactionNumber = TE.TransactionNumber
WHERE TE.TransactionTime >= '2015-06-01' AND
TE.TransactionTime < '2015-07-01' ;
注意:
group by
。答案 1 :(得分:0)
Oracle 11g R2架构设置:
CREATE TABLE Transactions ( TransactionNum, Price, "Date" ) AS
SELECT 1, 8.99, DATE '2015-06-01' FROM DUAL
UNION ALL SELECT 1, 3.65, DATE '2015-06-01' FROM DUAL
UNION ALL SELECT 2, 3.99, DATE '2015-06-03' FROM DUAL;
CREATE TABLE Taxes ( TransactionNum, TaxID, TaxAmount ) AS
SELECT 1, 2, 0.89 FROM DUAL
UNION ALL SELECT 1, 16, 0.09 FROM DUAL
UNION ALL SELECT 1, 2, 0.37 FROM DUAL
UNION ALL SELECT 1, 16, 0.04 FROM DUAL
UNION ALL SELECT 2, 4, 0.40 FROM DUAL
UNION ALL SELECT 2, 16, 0.04 FROM DUAL;
查询1 :
SELECT t.TransactionNum,
t.total_price + COALESCE( x.total_tax, 0 ) AS total_cost
FROM ( SELECT TransactionNum,
SUM( Price ) AS total_price
FROM Transactions
WHERE "Date" BETWEEN DATE '2015-06-01' and DATE '2015-06-30'
GROUP BY TransactionNum ) t
LEFT OUTER JOIN
( SELECT TransactionNum,
SUM( TaxAmount ) AS total_tax
FROM Taxes
GROUP BY TransactionNum ) x
ON ( t.TransactionNum = x.TransactionNum )
<强> Results 强>:
| TRANSACTIONNUM | TOTAL_COST |
|----------------|------------|
| 1 | 14.03 |
| 2 | 4.43 |