【问题标题】:Having issues creating proper sum of quantity*price on an invoice在发票上创建正确的数量*价格总和时遇到问题
【发布时间】:2013-03-18 14:10:04
【问题描述】:

我正在创建一张发票表,将每个项目按年份分组,并使用 Toad for Oracle 进行查询。

我目前正在做的是使用与我的视图相同的 FROM 和 WHERE 子句(因为这些数据来自多个表)

Select DISTINCT 
SUM(Credits * Credit_Price) as "Cost", to_char(START_DATE, 'YYYY') as "YEAR", 
PERSON_ID, ITEM_TYPE
[...]
WHERE
[...]
to_char(START_DATE, 'YYYY') = '2012'

当我查看我创建的视图中的成本时,我看到相应人员的成本为 0、100 和 0 的条目,

但如果我执行 SUM/GROUP BY(按 item_type、person_id 和 to_char(START_DATE, 'YYYY') 分组),同一个人的成本为 3860700!

关于如何解决这个问题让我得到 100 而不是 3860700 的任何想法?

编辑:所以基本上我想要一个数量*成本,但要对其求和,以便获得该项目类型的总数(而不是同一项目有多行)。

【问题讨论】:

  • 如果您删除“DISTINCT”,您是否仍会得到 3 行:0,100,0?还是你得到更多的行?
  • 如果我切换到我的视图(这是相同的减去 SUM/Group by 语句)并删除 DISTINCT 我似乎得到了很多(超过 2k)行......如果我从当然,SUM 查询我仍然只是得到一个。
  • Distinct 可能隐藏了一个连接中的错误 - 没有看到您的代码,很难提供帮助。
  • 是的 - 发布您的完整查询。结果如此巨大,首先想到的是您正在交叉连接一两个表,正如@NevilleK 上面提到的那样。

标签: sql oracle toad invoices


【解决方案1】:

在SQL中SELECT distinct sum()不会对不同的值求和,所以需要先选择不同的值再求和:

Select  
SUM(Credits * Credit_Price) as "Cost", to_char(START_DATE, 'YYYY') as "YEAR", 
PERSON_ID, ITEM_TYPE
[...]
 from (select DISTINCT Credits , Credit_Price, START_DATE,PERSON_ID, ITEM_TYPE
[...])
WHERE
[...]
to_char(START_DATE, 'YYYY') = '2012'

或者像这样将不同的值放在总和中:

Select  
SUM(DISTINCT Credits * Credit_Price) as "Cost", to_char(START_DATE, 'YYYY') as "YEAR", 
PERSON_ID, ITEM_TYPE
[...]
WHERE
[...]
to_char(START_DATE, 'YYYY') = '2012'

请注意,这 2 个选项不是相等的,你想总结不同的 Credits , Credit_Price 还是不同的 Credits * Credit_Price ?

See sqlfiddle example

【讨论】:

  • 嗯,有道理,sqlfiddle 示例很有帮助,谢谢!嗯,嗯,每一行都有单笔交易的 credits 和 credit_price,我想把所有交易的成本加起来……想不出我想要哪一个。
  • 在您的帮助下我似乎已经解决了问题并进行了更多测试,非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-17
  • 1970-01-01
  • 1970-01-01
  • 2020-08-19
  • 2017-03-26
相关资源
最近更新 更多