2017-08-07 49 views
-2

您好我一直在下面的格式Original Data逆透視與增量日期


+------+---------+----------+-----------+---------+---------+---------+---------+ | Item | Channel | Location | STARTDATE | PERIOD1 | PERIOD2 | PERIOD3 | PERIOD4 | +------+---------+----------+-----------+---------+---------+---------+---------+ | A101 | Online | NY | 7/17/2017 | 1 | | 1 | | +------+---------+----------+-----------+---------+---------+---------+---------+ | A102 | Store | PV | 7/24/2017 | 1 | | 1 | 1 | +------+---------+----------+-----------+---------+---------+---------+---------+

我想通過STARTDATE + 7日內更換間隔1中的數據的數據,間隔2的開始日期+ 14天等,基本上每週都有水桶。


和上面的數據應該是這樣的: Final result

+------+---------+----------+-----------+-----------+-----+ | Item | Channel | Location | STARTDATE | Period | QTY | +------+---------+----------+-----------+-----------+-----+ | A101 | Online | NY | 7/17/2017 | 7/24/2017 | 1 | +------+---------+----------+-----------+-----------+-----+ | A101 | Online | NY | 7/17/2017 | 7/31/2017 | | +------+---------+----------+-----------+-----------+-----+ | A101 | Online | NY | 7/17/2017 | 8/7/2017 | 1 | +------+---------+----------+-----------+-----------+-----+ | A101 | Online | NY | 7/17/2017 | 8/14/2017 | | +------+---------+----------+-----------+-----------+-----+ | A102 | Store | PV | 7/24/2017 | 7/31/2017 | 1 | +------+---------+----------+-----------+-----------+-----+ | A102 | Store | PV | 7/24/2017 | 8/7/2017 | | +------+---------+----------+-----------+-----------+-----+ | A102 | Store | PV | 7/24/2017 | 8/14/2017 | 1 | +------+---------+----------+-----------+-----------+-----+ | A102 | Store | PV | 7/24/2017 | 8/21/2017 | 1 | +------+---------+----------+-----------+-----------+-----+

+1

不包括屏幕截圖您的數據,將其直接包含在問題中。無論如何,這可能都是重複的。 –

+0

我試了很長時間把表格轉換成文本後,但它不工作:( – user6777467

回答

0

這裏是我的創建和插入語句來進行測試:

create table Testing 
(
    ITEM varchar2(4), 
    CHANNEL varchar2(10), 
    LOCATION varchar2(2), 
    STARTDATE date, 
    PERIOD1 number, 
    PERIOD2 number, 
    PERIOD3 number, 
    PERIOD4 number 
); 

insert into Testing 
values('A101','Online','NY',to_date('07/17/2017','MM/DD/YYYY'),1,cast(null as number),1,cast(null as number)); 
insert into Testing 
values('A102','Store','PV',to_date('07/24/2017','MM/DD/YYYY'),1,cast(null as number),1,1); 

在那之後,我就能夠創建這個untivot,只要你不關心空數量行,它就會給你想要的東西:

select ITEM "Item", CHANNEL "Channel", LOCATION "Location", STARTDATE "StartDate", 
     STARTDATE + 7 * to_number(substr(PERIOD,-1)) "Period", QTY 
from 
Testing 
unpivot(
    QTY for Period in (period1,period2,period3,period4) 
) 

用於查詢1輸出:

Item Channel  Location StartDate Period  QTY 
A101 Online  NY   17-JUL-17 24-JUL-17 1 
A101 Online  NY   17-JUL-17 07-AUG-17 1 
A102 Store  PV   24-JUL-17 31-JUL-17 1 
A102 Store  PV   24-JUL-17 14-AUG-17 1 
A102 Store  PV   24-JUL-17 21-AUG-17 1 

如果由於某種原因,你需要這些空行,你可以把一個NVL圍繞各個時期unpivoting前:

select ITEM "Item", CHANNEL "Channel", LOCATION "Location", STARTDATE "StartDate", 
     STARTDATE + 7 * to_number(substr(PERIOD,-1)) "Period", QTY 
from(
select ITEM,CHANNEL,LOCATION,STARTDATE,nvl(PERIOD1,0) PERIOD1,nvl(PERIOD2,0) PERIOD2,nvl(PERIOD3,0) PERIOD3,nvl(PERIOD4,0) PERIOD4 
from Testing 
) 
unpivot(
    QTY for Period in (period1,period2,period3,period4) 
) 

輸出爲查詢2:

Item Channel  Location StartDate Period  QTY 
A101 Online  NY   17-JUL-17 24-JUL-17 1 
A101 Online  NY   17-JUL-17 31-JUL-17 0 
A101 Online  NY   17-JUL-17 07-AUG-17 1 
A101 Online  NY   17-JUL-17 14-AUG-17 0 
A102 Store  PV   24-JUL-17 31-JUL-17 1 
A102 Store  PV   24-JUL-17 07-AUG-17 0 
A102 Store  PV   24-JUL-17 14-AUG-17 1 
A102 Store  PV   24-JUL-17 21-AUG-17 1 
+0

非常感謝你的工作。:) – user6777467