2011-04-15 3 views
1

Hallo、 私はテーブルtableAとテーブルtableBを持っている。 tableAにはAmountという列があります。 tableBにはrefIDという列があります。同じ値を持つrefIDがある場合、Amountカラムを合計したいと思います。私は私のクエリでSUMを使用していたが、それは私にエラーをスロー:ここ私は結合テーブルを持っているときに合計を照会する方法

ORA-30483: window functions are not allowed here 
30483. 00000 - "window functions are not allowed here" 
*Cause: Window functions are allowed only in the SELECT list of a query. 
      And, window function cannot be an argument to another window or group 
      function. 

はあなたの参照のための私のクエリです:

select * 
from (
     select SUM(A.Amount), B.refId, Rank() over (partition by B.refID order by B.id desc) as ranking 
     from table A 
     left outer join table B on A.refID = B.refID 
) 
where ranking=1; 

は、私が知っているかもしれない私がするためには任意の代替ソリューションがあります金額を合計しますか?

THanks @!

答えて

1
SELECT * 
FROM (
     SELECT A.Amount, B.refId, 
       Rank() over (partition by A.refID order by B.id desc) as ranking, 
       SUM(amount) OVER (PARTITION BY a.refId) AS asum 
     FROM tableA A 
     LEFT JOIN 
       tableB B 
     ON  B.refID = A.refID 
     ) 
WHERE ranking = 1 
+0

いいね! OVER(PARTITION BY a.refId)のないSUM(量)は機能していません。私はそれが問合せのランク()によって引き起こされるかどうかを考えていたので、そのように量を合計することはできません。 :0) – huahsin68

+0

@ huahsin68:「作業していない」とは何を意味するのかを指定してください:構文解析せず、エラーをスローし、不正な結果を返しますか? – Quassnoi

2
select 
    SUM(A.Amount), 
    B.refId 
from table A 
    left outer join table B on A.refID = B.refID 
GROUP BY 
    B.refId 
0
SELECT refid, sum(a.amount) 
FROM table AS a LEFT table AS b USING (refid) 
GROUP BY refid; 
0

私は少し混乱しています。投稿したクエリにはどこにでもSUM関数がなく、 "TABLE"という名前のテーブルの自己結合が実行されました。私はあなただけの結果を望んでいたあなたの質問を理解している場合

SELECT a.REFID, SUM(a.AMOUNT) 
    FROM TABLE_A a 
    INNER JOIN TABLE_B b 
    ON (b.REFID = a.REFID) 
    GROUP BY a.REFID; 

:私はあなたが実際に次のようにそれを行う必要があり、その場合には2つのテーブルを(私はTABLE_AとTABLE_Bそれらを呼ぶことにします)、持っていることを推測するつもりですTABLE_B.REFIDがTABLE_A.REFIDと一致するので、INNER JOINが適切です。

共有して楽しんでください。

1
Declare @T table(id int) 
    insert into @T values (1),(2) 
    Declare @T1 table(Tid int,fkid int,Amount int) 
    insert into @T1 values (1,1,200),(2,1,250),(3,2,100),(4,2,25) 

    Select SUM(t1.Amount) as amount,t1.fkid as id from @T t 
left outer join @T1 t1 on t1.fkid = t.id group by t1.fkid 
関連する問題