2016-08-04 21 views
5

Tôi đang cố gắng tạo một CTE trong Oracle mà không chọn từ một bảng hiện có mà thay vào đó có dữ liệu được chèn vào nó. Hiện tại, tôi đang tạo một bảng và sau đó thả nó sau khi truy vấn được thực hiện. Có cách nào để tạo ra một CTE có hiệu quả không? Đây là mã hiện tại của tôi:Tạo một CTE trong 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')); 

Trả lời

8

Bạn có thể tạo biểu thức bảng chung của bạn (CTE, subquery factoring, vv) bằng cách chọn các giá trị ngày từ kép, và unioning tất cả chúng với nhau:

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 

Không liên quan đến nó là CTE, nhưng bạn có thể giảm bớt việc gõ một chút bằng cách sử dụng date literals:

with RTG_YEARS (YR) as (
    select date '2013-01-01' from dual 
    union all select date '2013-12-31' from dual 
    union all select date '2014-01-01' from dual 
    union all select date '2014-12-31' from dual 
    union all select date '2015-01-01' from dual 
    union all select date '2015-12-31' from dual 
) 
select * from RTG_YEARS; 
+0

Cảm ơn! Tôi đã thấy các bài viết khác nói về bảng kép nhưng tôi không chắc nó là gì. Điều này thực sự hữu ích. – mosk915

+0

@ mosk915 - tài liệu về [chọn từ DUAL] (http://docs.oracle.com/cd/E11882_01/server.112/e41084/queries009.htm#SQLRF20036) giải thích một chút. –

Các vấn đề liên quan