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 のコストがかかります!

これを修正して 3860700 ではなく 100 を取得する方法についてのアイデアはありますか?

編集:したがって、基本的には数量*コストが必要ですが、それを合計して、そのアイテムタイプの合計を取得します(同じアイテムに複数の行を含めるのではなく)。

4

1 に答える 1

0

In SQL SELECT distinct sum() will not sum distinct values, so you need to first select the distinct values and then sum them up:

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'

or put the distinct inside the sum like this:

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'

Note that the 2 options aren't equel, do you want to sum the distinct Credits , Credit_Price or the distinct Credits * Credit_Price ?

See sqlfiddle example

于 2013-03-18T14:19:52.057 に答える