Не хотите включать псевдоним Case в предложение group by - PullRequest
0 голосов
/ 09 августа 2011
SELECT SUM (e.quantity) AS quantity
  ,e.tran_id
  ,e.SEQUENCE
  ,MAX (e.veh) AS veh
  ,a.DATE AS DATE
  ,a.aloc_sequence
  ,CASE
     WHEN a.currency = 'USD' THEN e.COST
     ELSE e.COST * getrate ('ABC'
                           ,a.currency
                           ,a.DATE
                           )
   END AS cost
FROM   execution e
  ,vehicles v
  ,allocation a
WHERE    e.vehicle = v.vehicle
AND      a.part_id = e.part_id
AND      a.aloc_sequence = e.aloc_sequence
GROUP BY e.tran_id
    ,e.SEQUENCE
    ,date
    ,a.aloc_sequence

Я не хочу включать стоимость (которая была рассчитана с использованием вычетов в SELECT) в группу по пунктам, пожалуйста, помогите мне.Я использую оракул как rdbms

1 Ответ

4 голосов
/ 09 августа 2011

Когда вы используете группу, вы объединяете много строк в одну. Вы либо GROUP BY столбец, который гарантирует, что значение является одинаковым для каждой строки в группе, или вы агрегируете значения некоторым способом (min, max, avg и т. Д.)

Если вы не укажете столбец в группе, существует двусмысленность в отношении того, какое значение возвращать (поскольку они не входят в группу, так как они могут отличаться, и вам нужно четко указать, какой из них вы хотите)

Вы можете обернуть агрегат вокруг COST, т.е. SUM (стоимость), если вы хотите получить сумму, или MAX (стоимость), если они всегда будут одинаковыми от строки к строке (хотя почему бы не сгруппировать к тому времени?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...