|
查看: 1391|回复: 2
|
如何把转换以下records. (解决)
[复制链接]
|
|
|
Table : tblABC
ID WeekA WeekB
-------- --------- -----------
15004 200823 NULL
15004 200824 200824
15004 200825 NULL
15004 200826 NULL
15004 200827 200827
15004 200828 NULL
15004 200829 NULL
15004 200830 200830
15004 200831 NULL
15004 200832 NULL
15004 200833 NULL
变成
ID WeekA WeekB
-------- --------- -----------
15004 200823 200824
15004 200825 200827
15004 200828 200830
15004 200831 200833
OR
ID WeekA WeekB
-------- --------- -----------
15004 200823 200824
15004 200824 200824
15004 200825 200827
15004 200826 200827
15004 200827 200827
15004 200828 200830
15004 200829 200830
15004 200830 200830
15004 200831 200833
15004 200832 200833
15004 200833 200833
[ 本帖最后由 sawyih1 于 17-9-2008 11:20 PM 编辑 ] |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 17-9-2008 11:18 PM
|
显示全部楼层
答案是:
with ed as ( select id, WeekB from tblABC where WeekB is not null
union all select id, max(WeekA) from tblABC group by id
)
select ed.id
, ( select min(i.WeekA)
from tblABC i
WHERE i.id = ed.id
and i.WeekA <= ed.WeekB
and i.WeekA > coalesce( ( SELECT max(x.WeekB) from ed x where x.id = ed.id and x.WeekB < ed.WeekB )
, ( SELECT min(x.WeekA)-1 from tblABC x where x.ID = ed.ID )
)
) WeekA
, ed.WeekB
from ed
order by ed.id, ed.WeekB |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 17-9-2008 11:21 PM
|
显示全部楼层
如果要试用的话:用这个
create table tblABC ( ID int ,WeekA int, WeekB int )
go
set nocount on
insert into tblABC values (15004 , 200823 , NULL)
insert into tblABC values (15004 , 200824 , 200824)
insert into tblABC values (15004 , 200825 , NULL)
insert into tblABC values (15004 , 200826 , NULL)
insert into tblABC values (15004 , 200827 , 200827)
insert into tblABC values (15004 , 200828 , NULL)
insert into tblABC values (15004 , 200829 , NULL)
insert into tblABC values (15004 , 200830 , 200830)
insert into tblABC values (15004 , 200831 , NULL)
insert into tblABC values (15004 , 200832 , NULL)
insert into tblABC values (15004 , 200833 , NULL)
insert into tblABC values (15006 , 200823 , NULL)
insert into tblABC values (15006 , 200824 , 200824)
insert into tblABC values (15006 , 200825 , NULL)
insert into tblABC values (15006 , 200826 , NULL)
insert into tblABC values (15006 , 200827 , NULL)
insert into tblABC values (15006 , 200828 , NULL)
insert into tblABC values (15006 , 200829 , 200829)
insert into tblABC values (15006 , 200830 , NULL)
insert into tblABC values (15006 , 200831 , 200831)
insert into tblABC values (15006 , 200832 , NULL)
insert into tblABC values (15006 , 200833 , NULL)
go
with ed as ( select id, WeekB from tblABC where WeekB is not null
union all select id, max(WeekA) from tblABC group by id
)
select ed.id
, ( select min(i.WeekA)
from tblABC i
WHERE i.id = ed.id
and i.WeekA <= ed.WeekB
and i.WeekA > coalesce( ( SELECT max(x.WeekB) from ed x where x.WeekB < ed.WeekB )
, ( SELECT min(x.WeekA)-1 from tblABC x where x.ID = i.ID )
)
) WeekA
, ed.WeekB
from ed
go
drop table tblABC |
|
|
|
|
|
|
|
|
| |
本周最热论坛帖子
|