Как запросить итоги, когда у меня есть таблица соединений - PullRequest
1 голос
/ 15 апреля 2011

Привет, у меня есть таблица соединений, указанные таблицы A и tableB.У tableA есть столбец с именем Amount.В tableB есть столбец с именем refID.Я хотел бы суммировать столбец Amount, когда refID имеет то же значение.Я использовал 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;

Могу ли я узнать, есть ли альтернативное решение взаказать для меня СУММУ Сумма?

Спасибо @!

Ответы [ 5 ]

2 голосов
/ 15 апреля 2011
select 
  SUM(A.Amount), 
  B.refId
from table A
  left outer join table B on A.refID = B.refID
GROUP BY 
  B.refId
1 голос
/ 15 апреля 2011
  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
1 голос
/ 15 апреля 2011
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 голосов
/ 15 апреля 2011

Я немного растерялся. Отправленный вами запрос нигде не имел функции SUM и выполнил самосоединение таблицы с именем «TABLE». Я собираюсь догадаться, что у вас на самом деле есть две таблицы (я назову их TABLE_A и TABLE_B), и в этом случае следует сделать следующее:

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

Если я понял ваш вопрос, вы хотели бы получить результаты только тогда, когда у вас есть TABLE_B.REFID, который соответствует TABLE_A.REFID, поэтому INNER JOIN будет уместным.

Делись и наслаждайся.

0 голосов
/ 15 апреля 2011
SELECT refid, sum(a.amount)
FROM table AS a LEFT table AS b USING (refid)
GROUP BY refid;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...