2016-10-03 6 views
0

Моя база данных:заспорить по запросу SQL

TB_DW_VAB_FLIGHT : ID_TEC_FLIGHT 
    TB_DW_VAB_SALES : QUANTITY, TRANSACTION_NUMBER, UNIT_SALES_PRICE 

Я хочу иметь таблицу с 4-мя колоннами, как результат: CA, QTE, NB_TRANSACTION и NB_VOLS в том же месяце. (N-1)

Я попробовал запрос SQL, как это:

SELECT 
    sum(QUANTITY*UNIT_SALES_PRICE) as CA, 
    sum(QUANTITY) as QTE, 
    count(distinct TRANSACTION_NUMBER) as NB_TRANSACTION, 
    count(distinct ID_TEC_FLIGHT) as NB_VOLS 
FROM TB_DW_VAB_SALES, TB_DW_VAB_FLIGHT 
where to_char(TB_DW_VAB_SALES.FLIGHT_DATE,'MM')=to_char(current_date,'MM')-1 and to_char(TB_DW_VAB_SALES.FLIGHT_DATE,'YYYY')=to_char(current_date,'YYYY') and SALES_TYPE='SALES' 
and to_char(TB_DW_VAB_FLIGHT.FLIGHT_DATE,'MM')=to_char(current_date,'MM')-1 and to_char(TB_DW_VAB_FLIGHT.FLIGHT_DATE,'YYYY')=to_char(current_date,'YYYY'); 

Но Oracle не может дать мне ответ.

Благодарим за помощь.

+0

Там нет никакой связи между TB_DW_VAB_FLIGHT и TB_DW_VAB_SALES. Что именно ID_TEC_FLIGHT вам точно говорит? – JohnHC

+0

Нет никакой связи между этими двумя таблицами, я просто хочу показать количество полетов с подсчетом количества ID (ID_TEC_FLIGHT) в моей таблице TB_DW_VAB_FLIGHT – devicz

ответ

0

Попробуйте

with CTE1 as 
(
select to_char(FLIGHT_DATE, 'MM-YYYY') as PERIOD, 
     sum(QUANTITY*UNIT_SALES_PRICE) as CA, 
     sum(QUANTITY) as QTE, 
     count(distinct TRANSACTION_NUMBER) as NB_TRANSACTION 
from TB_DW_VAB_SALES 
where SALES_TYPE = 'SALES' 
group by to_char(FLIGHT_DATE, 'MM-YYYY') 
) 
, CTE2 as 
(
select count(distinct ID_TEC_FLIGHT) as NB_VOLS, 
     to_char(FLIGHT_DATE, 'MM-YYYY') as PERIOD 
from TB_DW_VAB_FLIGHT 
group by to_char(FLIGHT_DATE, 'MM-YYYY') 
) 
select CTE1.CA, 
     CTE1.QTE, 
     CTE1.NB_TRANSACTION, 
     CTE2.NB_VOLS 
from CTE1 
inner join CTE2 on CTE1.PERIOD = CTE2.PERIOD 
where CTE1.PERIOD = to_char(add_Months(sysdate,-1),'MM-YYYY') 

или если КТР нам не доступны в вашем программном обеспечении:

select CTE1.CA, 
     CTE1.QTE, 
     CTE1.NB_TRANSACTION, 
     CTE2.NB_VOLS 
from 
(
select to_char(FLIGHT_DATE, 'MM-YYYY') as PERIOD, 
     sum(QUANTITY*UNIT_SALES_PRICE) as CA, 
     sum(QUANTITY) as QTE, 
     count(distinct TRANSACTION_NUMBER) as NB_TRANSACTION 
from TB_DW_VAB_SALES 
where SALES_TYPE = 'SALES' 
group by to_char(FLIGHT_DATE, 'MM-YYYY') 
) CTE1 
inner join 
(
select count(distinct ID_TEC_FLIGHT) as NB_VOLS, 
     to_char(FLIGHT_DATE, 'MM-YYYY') as PERIOD 
from TB_DW_VAB_FLIGHT 
group by to_char(FLIGHT_DATE, 'MM-YYYY') 
) CTE2 
    on CTE1.PERIOD = CTE2.PERIOD 
where CTE1.PERIOD = to_char(add_Months(sysdate,-1),'MM-YYYY') 
+0

@AlexPoole С тех пор обновил оригинальный пост ... Редактирование теперь – JohnHC

+0

Оно работает ! Большое спасибо !! – devicz

+0

Привет, Этот запрос отлично работает в Oracle, но JasperSoft не собирается «с». Есть возможность получить аналогичный запрос в классическом SQL? – devicz

Смежные вопросы