Сумма 2 выбирает заявление в SQL с различными, где Clause - PullRequest
0 голосов
/ 07 апреля 2019

Я пытаюсь получить сумму из 2 столбцов в одной таблице, но с другим, где условие, единственная разница в том, что сумма на отдел рассчитывается на основе 17% маржи.Результатом должен быть общий доход, сгруппированный по названию события и идентификатору события.

для отчета SQL, я написал 2 оператора SQL с различными условиями и получил правильное значение для 2 столбцов, но отдельно я суммировал оба способа, но это было для одного события.

SELECT EVT_ID, Event_Desc, Sum(Order_Total) as Total + (Select SUm(Order_Total *0.17) as Total from Orders Join Events EM On OrD.EVT_ID = EV.EVENTS_ID 
where EVT_START_DATE between '2019-01-01' and '2019-01-31' Order_Department = 'FAB'  )
From Orders Join Events EM On OrD.EVT_ID = EV.EVENTS_ID 
where EVT_START_DATE between '2019-01-01' and '2019-01-31' Order_Department <> 'FAB'  
Group by EVT_ID, Event_Desc

Ответы [ 2 ]

1 голос
/ 07 апреля 2019
select EVT_ID, Event_Desc, sum(Total)as Total 
from 
(
SELECT EVT_ID, Event_Desc, Sum(Order_Total) as Total 
 From Orders 
 Join Events EM On OrD.EVT_ID = EV.EVENTS_ID 
 where EVT_START_DATE between '2019-01-01' and '2019-01-31' and Order_Department <> 'FAB'
Group by EVT_ID, Event_Desc 
 union
Select EVT_ID, Event_Desc, SUm(Order_Total *0.17) as Total 
from Orders 
Join Events EM On OrD.EVT_ID = EV.EVENTS_ID 
 where EVT_START_DATE between '2019-01-01' and '2019-01-31' and Order_Department = 'FAB' )  tbl   
 Group by EVT_ID, Event_Desc

OR

 SELECT EVT_ID, Event_Desc, Sum(case when Order_Department = 'FAB' then Order_Total else Order_Total *0.17 end ) as Total 
 From Orders 
 Join Events EM On OrD.EVT_ID = EV.EVENTS_ID 
 where EVT_START_DATE between '2019-01-01' and '2019-01-31'  
Group by EVT_ID, Event_Desc 
0 голосов
/ 07 апреля 2019

Если бы я следовал за вами правильно, вы могли бы подойти к этому с условной агрегацией . Вы можете использовать конструкцию CASE в агрегатной функции SUM, чтобы проверить, к какому отделу принадлежит текущая запись, и выполнить вычисления соответственно.

SELECT
    o.evt_id,
    event_desc,
    SUM(CASE 
        WHEN order_department = 'FAB' THEN order_total * 0.17 
        ELSE order_total END
    ) AS Total
FROM orders o
INNER JOIN events e On o.evt_id = e.events_id    
WHERE evt_start_date BETWEEN '2019-01-01' and '2019-01-31'
GROUP BY 
    o.evt_id,
    event_desc

Примечание: большинство столбцов в вашем запросе не имеют префикса таблицы, поэтому неясно, из какой они таблицы. Я добавил их, когда можно было сделать обоснованное предположение из вашего кода SQL, и я настоятельно рекомендую вам добавить префиксы ко всем остальным.

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