求一视图,有难度,请高手看过来
有一张表,如下表(receiveorder)想创建一个视图view_order,但搞不定,请高手帮忙。
收单明细表(receiveorder)------用于记录每一客户每一物料的订单数量和交货日期的信息, 其中,同一客户、订单号和流水单号可以有多个物料和不同日期的订单
id 客户名称 客户编号 订单编号 流水单号 操作员 收单日期 备注 物料名称 物料编码 订单数量 单位 交货日期
1 aaa 1 a0001 200701010001 cc 2007-1-1 null k2548 1001 2008 pc 2007-1-20
2 aaa 1 a0001 200701010001 cc 2007-1-1 null k2547 1002 800 pc 2007-1-12
3 aaa 1 a0001 200701010001 cc 2007-1-1 null k2546 1003 200 pc 2007-1-15
4 bbb 2 b0001 200701050001 dd 2007-1-3 null z2001 6001 1000 pc 2007-1-20
5 bbb 2 b0001 200701050001 dd 2007-1-3 null z2002 6002 800 pc 2007-1-12
6 aaa 1 a0002 200701030001 cc 2007-1-3 null k2548 1001 200 pc 2007-2-25
.
.
.
.
变成按月划分的视图(view_order)----可以查看每一客户每一物料(若有订单)某一个月内具体某日的订单数量及其本物该物料的订单总和
客户名称 客户编号 物料名称 物料编码 单位 1日 2日 …12日…15日 …20日…25日… 31日 总 计 月份
aaa 1 k2548 1001 pc 0 0 0 0 2008 200 0 2208 2007-01
aaa 1 k2547 1002 pc 0 0 800 0 0 0 0 800 2007-01
aaa 1 k2546 1003 pc 0 0 0 200 0 0 0 200 2007-01
bbb 2 z2001 6001 pc 0 0 0 0 1000 0 0 1000 2007-01
bbb 2 z2002 6002 pc 0 0 800 0 0 0 0 800 2007-01
aaa 1 k2548 1001 pc 0 0 0 0 0 200 0 200 2007-02
.
.
.
.
[解决办法]
select 客户名称,客户编号,物料名称,物料编码,单位,
[1日]=case when day(交货日期)=1 then 订单数量 else 0 end,
[2日]=case when day(交货日期)=2 then 订单数量 else 0 end,
[3日]=case when day(交货日期)=3 then 订单数量 else 0 end,
[4日]=case when day(交货日期)=4 then 订单数量 else 0 end,
[5日]=case when day(交货日期)=5 then 订单数量 else 0 end,
[6日]=case when day(交货日期)=6 then 订单数量 else 0 end,
[7日]=case when day(交货日期)=7 then 订单数量 else 0 end,
[8日]=case when day(交货日期)=8 then 订单数量 else 0 end,
[9日]=case when day(交货日期)=9 then 订单数量 else 0 end,
[10日]=case when day(交货日期)=10 then 订单数量 else 0 end,
[11日]=case when day(交货日期)=11 then 订单数量 else 0 end,
[12日]=case when day(交货日期)=12 then 订单数量 else 0 end,
[13日]=case when day(交货日期)=13 then 订单数量 else 0 end,
[14日]=case when day(交货日期)=14 then 订单数量 else 0 end,
[15日]=case when day(交货日期)=15 then 订单数量 else 0 end,
[16日]=case when day(交货日期)=16 then 订单数量 else 0 end,
[17日]=case when day(交货日期)=17 then 订单数量 else 0 end,
[18日]=case when day(交货日期)=18 then 订单数量 else 0 end,
[19日]=case when day(交货日期)=19 then 订单数量 else 0 end,
[20日]=case when day(交货日期)=20 then 订单数量 else 0 end,
[21日]=case when day(交货日期)=21 then 订单数量 else 0 end,
[22日]=case when day(交货日期)=22 then 订单数量 else 0 end,
[23日]=case when day(交货日期)=23 then 订单数量 else 0 end,
[24日]=case when day(交货日期)=24 then 订单数量 else 0 end,
[25日]=case when day(交货日期)=25 then 订单数量 else 0 end,
[26日]=case when day(交货日期)=26 then 订单数量 else 0 end,
[27日]=case when day(交货日期)=27 then 订单数量 else 0 end,
[28日]=case when day(交货日期)=28 then 订单数量 else 0 end,
[29日]=case when day(交货日期)=29 then 订单数量 else 0 end,
[30日]=case when day(交货日期)=30 then 订单数量 else 0 end,
[31日]=case when day(交货日期)=31 then 订单数量 else 0 end,
[总 计]=订单数量,
[月份]=convert(char(7),交货日期,21)
from t1
[解决办法]
create table t1(id int,客户名称 varchar(10),客户编号 int,订单编号 varchar(10),流水单号 varchar(20),操作员 varchar(10),
收单日期 datetime,备注 varchar(100),物料名称 varchar(10),物料编码 varchar(10),订单数量 int,单位 varchar(10),交货日期 datetime)
insert t1
select 1, 'aaa ',1, 'a0001 ', '200701010001 ', 'cc ', '2007-1-1 ',null, 'k2548 ', '1001 ',2008, 'pc ', '2007-1-20 ' union
select 2, 'aaa ',1, 'a0001 ', '200701010001 ', 'cc ', '2007-1-1 ',null, 'k2547 ', '1002 ',800, 'pc ', '2007-1-12 ' union
select 3, 'aaa ',1, 'a0001 ', '200701010001 ', 'cc ', '2007-1-1 ',null, 'k2546 ', '1003 ',200, 'pc ', '2007-1-15 ' union
select 4, 'bbb ',2, 'b0001 ', '200701050001 ', 'dd ', '2007-1-3 ',null, 'z2001 ', '6001 ',1000, 'pc ', '2007-1-20 ' union
select 5, 'bbb ',2, 'b0001 ', '200701050001 ', 'dd ', '2007-1-3 ',null, 'z2002 ', '6002 ',800, 'pc ', '2007-1-12 ' union
select 6, 'aaa ',1, 'a0002 ', '200701030001 ', 'cc ', '2007-1-1 ',null, 'k2548 ', '1001 ',200, 'pc ', '2007-2-25 '
select 客户名称,客户编号,物料名称,物料编码,单位,
[1日]=case when day(交货日期)=1 then 订单数量 else 0 end,
[2日]=case when day(交货日期)=2 then 订单数量 else 0 end,
[3日]=case when day(交货日期)=3 then 订单数量 else 0 end,
[4日]=case when day(交货日期)=4 then 订单数量 else 0 end,
[5日]=case when day(交货日期)=5 then 订单数量 else 0 end,
[6日]=case when day(交货日期)=6 then 订单数量 else 0 end,
[7日]=case when day(交货日期)=7 then 订单数量 else 0 end,
[8日]=case when day(交货日期)=8 then 订单数量 else 0 end,
[9日]=case when day(交货日期)=9 then 订单数量 else 0 end,
[10日]=case when day(交货日期)=10 then 订单数量 else 0 end,
[11日]=case when day(交货日期)=11 then 订单数量 else 0 end,
[12日]=case when day(交货日期)=12 then 订单数量 else 0 end,
[13日]=case when day(交货日期)=13 then 订单数量 else 0 end,
[14日]=case when day(交货日期)=14 then 订单数量 else 0 end,
[15日]=case when day(交货日期)=15 then 订单数量 else 0 end,
[16日]=case when day(交货日期)=16 then 订单数量 else 0 end,
[17日]=case when day(交货日期)=17 then 订单数量 else 0 end,
[18日]=case when day(交货日期)=18 then 订单数量 else 0 end,
[19日]=case when day(交货日期)=19 then 订单数量 else 0 end,
[20日]=case when day(交货日期)=20 then 订单数量 else 0 end,
[21日]=case when day(交货日期)=21 then 订单数量 else 0 end,
[22日]=case when day(交货日期)=22 then 订单数量 else 0 end,
[23日]=case when day(交货日期)=23 then 订单数量 else 0 end,
[24日]=case when day(交货日期)=24 then 订单数量 else 0 end,
[25日]=case when day(交货日期)=25 then 订单数量 else 0 end,
[26日]=case when day(交货日期)=26 then 订单数量 else 0 end,
[27日]=case when day(交货日期)=27 then 订单数量 else 0 end,
[28日]=case when day(交货日期)=28 then 订单数量 else 0 end,
[29日]=case when day(交货日期)=29 then 订单数量 else 0 end,
[30日]=case when day(交货日期)=30 then 订单数量 else 0 end,
[31日]=case when day(交货日期)=31 then 订单数量 else 0 end,
[总 计]=订单数量,
[月份]=convert(char(7),交货日期,21)
from t1
[解决办法]
create table t1(id int,客户名称 varchar(10),客户编号 int,订单编号 varchar(10),流水单号 varchar(20),操作员 varchar(10),
收单日期 datetime,备注 varchar(100),物料名称 varchar(10),物料编码 varchar(10),订单数量 int,单位 varchar(10),交货日期 datetime)
insert t1
select 1, 'aaa ',1, 'a0001 ', '200701010001 ', 'cc ', '2007-1-1 ',null, 'k2548 ', '1001 ',2008, 'pc ', '2007-1-20 ' union
select 2, 'aaa ',1, 'a0001 ', '200701010001 ', 'cc ', '2007-1-1 ',null, 'k2547 ', '1002 ',800, 'pc ', '2007-1-12 ' union
select 3, 'aaa ',1, 'a0001 ', '200701010001 ', 'cc ', '2007-1-1 ',null, 'k2546 ', '1003 ',200, 'pc ', '2007-1-15 ' union
select 4, 'bbb ',2, 'b0001 ', '200701050001 ', 'dd ', '2007-1-3 ',null, 'z2001 ', '6001 ',1000, 'pc ', '2007-1-20 ' union
select 5, 'bbb ',2, 'b0001 ', '200701050001 ', 'dd ', '2007-1-3 ',null, 'z2002 ', '6002 ',800, 'pc ', '2007-1-12 ' union
select 6, 'aaa ',1, 'a0002 ', '200701030001 ', 'cc ', '2007-1-1 ',null, 'k2548 ', '1001 ',200, 'pc ', '2007-2-25 ' union
select 7, 'aaa ',1, 'a0001 ', '200701010001 ', 'cc ', '2007-1-1 ',null, 'k2548 ', '1001 ',300, 'pc ', '2007-1-22 '
select 客户名称,客户编号,物料名称,物料编码,单位,
[1日] =sum(case when day(交货日期)=1 then 订单数量 else 0 end),
[2日] =sum(case when day(交货日期)=2 then 订单数量 else 0 end),
[3日] =sum(case when day(交货日期)=3 then 订单数量 else 0 end),
[4日] =sum(case when day(交货日期)=4 then 订单数量 else 0 end),
[5日] =sum(case when day(交货日期)=5 then 订单数量 else 0 end),
[6日] =sum(case when day(交货日期)=6 then 订单数量 else 0 end),
[7日] =sum(case when day(交货日期)=7 then 订单数量 else 0 end),
[8日] =sum(case when day(交货日期)=8 then 订单数量 else 0 end),
[9日] =sum(case when day(交货日期)=9 then 订单数量 else 0 end),
[10日]=sum(case when day(交货日期)=10 then 订单数量 else 0 end),
[11日]=sum(case when day(交货日期)=11 then 订单数量 else 0 end),
[12日]=sum(case when day(交货日期)=12 then 订单数量 else 0 end),
[13日]=sum(case when day(交货日期)=13 then 订单数量 else 0 end),
[14日]=sum(case when day(交货日期)=14 then 订单数量 else 0 end),
[15日]=sum(case when day(交货日期)=15 then 订单数量 else 0 end),
[16日]=sum(case when day(交货日期)=16 then 订单数量 else 0 end),
[17日]=sum(case when day(交货日期)=17 then 订单数量 else 0 end),
[18日]=sum(case when day(交货日期)=18 then 订单数量 else 0 end),
[19日]=sum(case when day(交货日期)=19 then 订单数量 else 0 end),
[20日]=sum(case when day(交货日期)=20 then 订单数量 else 0 end),
[21日]=sum(case when day(交货日期)=21 then 订单数量 else 0 end),
[22日]=sum(case when day(交货日期)=22 then 订单数量 else 0 end),
[23日]=sum(case when day(交货日期)=23 then 订单数量 else 0 end),
[24日]=sum(case when day(交货日期)=24 then 订单数量 else 0 end),
[25日]=sum(case when day(交货日期)=25 then 订单数量 else 0 end),
[26日]=sum(case when day(交货日期)=26 then 订单数量 else 0 end),
[27日]=sum(case when day(交货日期)=27 then 订单数量 else 0 end),
[28日]=sum(case when day(交货日期)=28 then 订单数量 else 0 end),
[29日]=sum(case when day(交货日期)=29 then 订单数量 else 0 end),
[30日]=sum(case when day(交货日期)=30 then 订单数量 else 0 end),
[31日]=sum(case when day(交货日期)=31 then 订单数量 else 0 end),
[总 计]=sum(订单数量),
[月份]=convert(char(7),交货日期,21)
from t1
group by 客户名称,客户编号,物料名称,物料编码,单位,convert(char(7),交货日期,21)
order by convert(char(7),交货日期,21)
drop table t1