2017-08-07 53 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