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

求一视图,有难度,请高手看过来,该如何解决

2012-02-25 
求一视图,有难度,请高手看过来 有一张表,如下表(receiveorder)想创建一个视图view_order,但搞不定,请高手

求一视图,有难度,请高手看过来

有一张表,如下表(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

热点排行