在发票上创建适当数量*价格的问题

时间:2013-03-18 14:10:05

标签: sql oracle toad invoices

我正在创建一张发票单,将每个项目分组为多年,使用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?

编辑:所以基本上我想要一个数量*成本,但总结它,所以我得到该项目类型的总数(而不是同一项目的多行)。

1 个答案:

答案 0 :(得分:0)

在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个选项不是equel,是否要对不同的Credits,Credit_Price求和 或不同的Credits * Credit_Price?

See sqlfiddle example