あなたは例えば、日に4つのバリエーションを指定するOR
またはIN
句を使用することができます。
DEFINE SALE_DT = 20DEC2016;
select STORE_ID, SALES_FINAL_DT, SUM(SALES) AS TOTAL_SALE
from SALES_DB
where SALES_FINAL_DT = TO_DATE('&SALE_DT', 'DDMONYYYY', 'NLS_DATE_LANGUAGE=ENGLISH')
or SALES_FINAL_DT = TO_DATE('&SALE_DT', 'DDMONYYYY', 'NLS_DATE_LANGUAGE=ENGLISH') - 7
or SALES_FINAL_DT = TO_DATE('&SALE_DT', 'DDMONYYYY', 'NLS_DATE_LANGUAGE=ENGLISH') - 8
or SALES_FINAL_DT = TO_DATE('&SALE_DT', 'DDMONYYYY', 'NLS_DATE_LANGUAGE=ENGLISH') - 30
group by STORE_ID, SALES_FINAL_DT;
あなたはまた、わずかにそれを簡素化するために全体to_date()
表現置換変数を行うことができます。
DEFINE SALE_DT = TO_DATE('20DEC2016', 'DDMONYYYY', 'NLS_DATE_LANGUAGE=ENGLISH')
select STORE_ID, SALES_FINAL_DT, SUM(SALES) AS TOTAL_SALE
from SALES_DB
where SALES_FINAL_DT = &SALE_DT
or SALES_FINAL_DT = &SALE_DT - 7
or SALES_FINAL_DT = &SALE_DT - 8
or SALES_FINAL_DT = &SALE_DT - 30
group by STORE_ID, SALES_FINAL_DT;
それも短くする
または米国IN
:
select STORE_ID, SALES_FINAL_DT, SUM(SALES) AS TOTAL_SALE
from SALES_DB
where SALES_FINAL_DT in (&SALE_DT, &SALE_DT - 7, &SALE_DT - 8, &SALE_DT - 30)
group by STORE_ID, SALES_FINAL_DT;
to_date()
コールにNLSデータ言語パラメータを含めました。セッションでは'DEC'
を理解すると仮定する文字列を使用しているためです。数値形式を使用する場合は、その必要はありません。
DEFINE SALE_DT = TO_DATE('2016-12-20', 'YYYY-MM-DD')
またはANSI日付リテラルとして:
DEFINE SALE_DT = DATE '2016-12-20'
おかげでアレックス、これは超便利です。好奇心の念から、where句に/ OR演算子を使用する以外にいくつか(&SALE_DT - number)があった場合、これをどのように扱うのでしょうか?ループを使ってどうすればいいですか? ... –
@Aussie_Stats - ループを使用することは本当に意味をなさない。 PL/SQLを使用し、結果セットを何らかの形で(コレクションを介して)結合する必要があります。それは扱いにくく、非効率的です。インラインビューまたはCTEを使用してさまざまなオフセットを生成し、それをあなたの実際のテーブルに結合することはできますが、それがあなたに多くの利益をもたらすかどうかはわかりません。 –
ありがとう、非常に役立ちます。 –