我需要从2个表中计算一些数据。当我进行手动或(计算器)计算时,我得到的输出与查询时的输出不同。任何人都可以指出错误是什么?
当我进行手工计算时,我得到'10'作为总卡,但是当我运行此查询时,我得到'41'。这是否与与tbltrans.card列没有任何关系的索引有关。
这是代码:
select
ifnull((tbltrans2.qty*tbltrans2.price*(tbltrans.Discountper/100)),0) Total,
ifnull(sum(tbltrans.card),0) totalcard
from tbltrans2,tbltrans
where tbltrans2.transid = tbltrans.transid
and tbltrans.saledate='06/01/2013'
这是我的tbltrans: 和tbltrans2:
答案 0 :(得分:1)
每个交易都有多个项目,因此card
字段将针对每个项目记录显示一次,因此每次交易将对其进行多次求和。
您的查询还有另一个问题:您正在使用sum
列的聚合函数(card
),但没有其他值的聚合。
然后发生的是SQLite为card
值计算一个总和,从而得到一个结果记录。
要计算此结果记录的Total
值,SQLite不知道要使用哪个tbltrans
/ tbltrans2
记录,因此它只使用一个随机从这些表中记录下来。
要计算正确的totalcard
值,您不得在同一查询中加入tbltrans2
表:
SELECT ifnull(sum(tbltrans.card), 0) AS totalcard
FROM tbltrans
WHERE tbltrans.saledate = '06/01/2013'
可以使用子查询计算Total
值,但这取决于其含义应该是什么。 (每笔交易的总折扣?该日期所有交易的总折扣?)