我正在创建一张发票单,将每个项目分组为多年,使用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?
编辑:所以基本上我想要一个数量*成本,但总结它,所以我得到该项目类型的总数(而不是同一项目的多行)。
答案 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?