0

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

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

4

1 回答 1

0

在 SQLSELECT 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'

或将 distinct 放在 sum 中,如下所示:

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 相加吗?

请参阅 sqlfiddle 示例

于 2013-03-18T14:19:52.057 回答