首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

从新构造数据

2012-12-21 
重新构造数据数据表Table1中的数据格式如下:发货仓库发货日期发货单号 A2012-10-11JD001 A2012-10-12JD002

重新构造数据
数据表Table1中的数据格式如下:
发货仓库    发货日期       发货单号
 A       2012-10-11    JD001
 A       2012-10-12    JD002
 A       2012-10-13    JD003
 B       2012-10-12    JD004
 B       2012-10-13    JD005

如何将数据表Table1中的数据构造成下面的格式
仓库A发货日期    仓库A发货单号     仓库B发货日期      仓库B发货单号
2012-10-11     JD001          2012-10-12       JD004
2012-10-12     JD002          2012-10-13       JD005
2012-10-13     JD003
[最优解释]

----------------------------
-- Author  :TravyLee(物是人非事事休,欲语泪先流!)
-- Date    :2012-11-24 13:03:35
-- Version:
--      Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86) 
--Jul  9 2008 14:43:34 
--Copyright (c) 1988-2008 Microsoft Corporation
--Developer Edition on Windows NT 6.1 <X86> (Build 7600: )
--
----------------------------
--> 测试数据:[test]
if object_id('[test]') is not null 
drop table [test]
go 
create table [test]
(
[发货仓库] varchar(1),
[发货日期] datetime,
[发货单号] varchar(5)
)
insert [test]
select 'A','2012-10-11','JD001' union all
select 'A','2012-10-12','JD002' union all
select 'A','2012-10-13','JD003' union all
select 'B','2012-10-12','JD004' union all
select 'B','2012-10-13','JD005'
go

with
t
as(
select
px=ROW_NUMBER()over(order by [发货日期]),
*
from
test
where
[发货仓库]='A'
),
m as
(
select
px=ROW_NUMBER()over(order by [发货日期]),
*
from
test
where
[发货仓库]='B'
)
select
t.发货日期 as 仓库A发货日期,
t.发货单号 as 仓库A发货单号,
m.发货日期 as 仓库B发货日期,
m.发货单号 as 仓库B发货单号
from
t
full join
m
on
t.px=m.px

/*
仓库A发货日期仓库A发货单号仓库B发货日期仓库B发货单号
---------------------------------------
2012-10-11 00:00:00.000JD0012012-10-12 00:00:00.000JD004
2012-10-12 00:00:00.000JD0022012-10-13 00:00:00.000JD005
2012-10-13 00:00:00.000JD003NULLNULL

*/

[其他解释]
设定仓库只有A、B两个

热点排行
Bad Request.