2017-03-13 19 views
0

私は、テーブルからいくつかの日付をフェッチするクエリを作成し、最新のものを決定するためにいくつかの操作を行い、次に7過去15年のうちに、何をすべきか教えてください。問題は私がそれをどうやってどうやって得ることができないかということです。私は周りを見回し、私はSELECT内でSELECTを使用する必要があるかもしれないが、それを把握していないようだ。私の文法はポイントや何かにはないと思うが、テーブルやビューは存在しない。使用選択内の選択2計算列を使用するOracle SQL

SELECT fact.NO_CONTRAT_OFFICIEL AS noContrat, 
Case When to_date(fact.VSTDTCHG, 'yyyymmdd') < to_date(fact.VSTDICHK, 'yyyymmdd') And to_date(fact.VSTDTCHG, 'yyyymmdd') < to_date(fact.VSTDIFIN, 'yyyymmdd') Then to_date(fact.VSTDTCHG, 'yyyymmdd') 
     When to_date(fact.VSTDICHK, 'yyyymmdd') < to_date(fact.VSTDTCHG, 'yyyymmdd') And to_date(fact.VSTDICHK, 'yyyymmdd') < to_date(fact.VSTDIFIN, 'yyyymmdd') Then to_date(fact.VSTDICHK, 'yyyymmdd') 
     Else to_date(fact.VSTDIFIN, 'yyyymmdd') 
     End As TheMin, 
Case When fact.NO_CONTRAT_OFFICIEL = virage.NO_CONTR Then sysdate - 15*365.25 
     Else sysdate - 7*365.25 
     End As Operation, 
(SELECT NO_CONTRAT_OFFICIEL, Operation, TheMin, 
    Case When TheMin < Operation Then 'yes' 
    Else 'no' 
    End As yesno 
    From XC4DSAV facts) as yesnotable 
FROM XC4DSAV fact 
JOIN yesnotable T1 
    ON fact.NO_CONTRAT_OFFICIEL = T1.NO_CONTRAT_OFFICIEL 
FULL OUTER JOIN STAR.EVENEMENT star 
    ON fact.NO_CONTRAT_OFFICIEL = star.NO_CONTRAT_DIFFUSE 
JOIN VIRAGE.CONTRAT virage 
    ON fact.VSTNOCNT_VIRAGE = virage.NO_CONTR 
WHERE fact.NO_CONTRAT_OFFICIEL IS NOT NULL; 

答えて

0

多少大きなクエリを解釈したいようです。ここでは、from句内のビューとしてそれを使用しました。次に、必要な列と計算を選択します。

SELECT noContrat, Operation, TheMin, 
    Case When TheMin < Operation Then 'yes' 
    Else 'no' 
    End As yesno 
from (SELECT fact.NO_CONTRAT_OFFICIEL AS noContrat, 
     Case When to_date(fact.VSTDTCHG, 'yyyymmdd') < to_date(fact.VSTDICHK, 'yyyymmdd') And to_date(fact.VSTDTCHG, 'yyyymmdd') < to_date(fact.VSTDIFIN, 'yyyymmdd') Then to_date(fact.VSTDTCHG, 'yyyymmdd') 
       When to_date(fact.VSTDICHK, 'yyyymmdd') < to_date(fact.VSTDTCHG, 'yyyymmdd') And to_date(fact.VSTDICHK, 'yyyymmdd') < to_date(fact.VSTDIFIN, 'yyyymmdd') Then to_date(fact.VSTDICHK, 'yyyymmdd') 
       Else to_date(fact.VSTDIFIN, 'yyyymmdd') 
       End As TheMin, 
     Case When fact.NO_CONTRAT_OFFICIEL = virage.NO_CONTR Then sysdate - 15*365.25 
       Else sysdate - 7*365.25 
       End As Operation 
     FROM XC4DSAV fact 
     FULL OUTER JOIN STAR.EVENEMENT star 
      ON fact.NO_CONTRAT_OFFICIEL = star.NO_CONTRAT_DIFFUSE 
     JOIN VIRAGE.CONTRAT virage 
      ON fact.VSTNOCNT_VIRAGE = virage.NO_CONTR 
     WHERE fact.NO_CONTRAT_OFFICIEL IS NOT NULL) 
+0

ありがとうございました。本当に正解ですが、それは私に多くの助けをしました。乾杯 – Markasius

関連する問題