2016-10-03 8 views
0

私のデータベースを問題に参加します。 (N-1)は、SQL要求に

私はこのような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

この2つのテーブルの間には関係がありません。私はテーブルの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') 

またはCTEの場合を試してみては、ソフトウェアでは使用できません。

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は "with"を作成することはありません。古典的なSQLで同様のリクエストを受け取る可能性はありますか? – devicz