2016-08-04 21 views
5

yılında bir CTE oluşturma. Şu anda, bir tablo oluşturup sorgulama tamamlandıktan sonra bırakıyorum. Aynı şeyi etkili yapan bir CTE oluşturmanın bir yolu var mı? Bu benim şimdiki kodudur:Mevcut bir tablodan seçmez Oracle'da bir CTE oluşturmaya çalışıyorum ama onun yerine veri içine sokulmuş olan Oracle

create table RTG_YEARS 
(YR date); 

insert into RTG_YEARS values (to_date('2013-01-01', 'yyyy-mm-dd')); 
insert into RTG_YEARS values (to_date('2013-12-31', 'yyyy-mm-dd')); 
insert into RTG_YEARS values (to_date('2014-01-01', 'yyyy-mm-dd')); 
insert into RTG_YEARS values (to_date('2014-12-31', 'yyyy-mm-dd')); 
insert into RTG_YEARS values (to_date('2015-01-01', 'yyyy-mm-dd')); 
insert into RTG_YEARS values (to_date('2015-12-31', 'yyyy-mm-dd')); 

cevap

8

Sen çift gelen tarih değerlerini seçme ve hepsini bir araya unioning ederek ortak tablo ifade (CTE, subquery factoring, vs.) oluşturabilirsiniz:

with RTG_YEARS (YR) as (
    select to_date('2013-01-01', 'yyyy-mm-dd') from dual 
    union all select to_date('2013-12-31', 'yyyy-mm-dd') from dual 
    union all select to_date('2014-01-01', 'yyyy-mm-dd') from dual 
    union all select to_date('2014-12-31', 'yyyy-mm-dd') from dual 
    union all select to_date('2015-01-01', 'yyyy-mm-dd') from dual 
    union all select to_date('2015-12-31', 'yyyy-mm-dd') from dual 
) 
select * from RTG_YEARS; 

YR  
---------- 
2013-01-01 
2013-12-31 
2014-01-01 
2014-12-31 
2015-01-01 
2015-12-31 

Değil CTE olmakla bağlantılı olarak, ancak date literals:

+0

kullanarak yazmayı biraz azaltabilirsiniz. İkili masadan bahseden başka yazılar görmüştüm ama ne olduğundan emin değildim. Bu gerçekten yardımcı olur. – mosk915

+0

mosk915 @ - [DUAL seçerek] ile ilgili belgeler (http://docs.oracle.com/cd/E11882_01/server.112/e41084/queries009.htm#SQLRF20036) biraz açıklar. –

İlgili konular