日期:2014-05-18  浏览次数:20673 次

求一个存储过程~~
services   week         POL                 POD                   ETADate                   Portid       tt
b2   35           Shanghai                                               1   0
b2   35 Yantian         2007-09-02         2     2
b2   35 HK         2007-09-03         3     3
b2   35 Busan         2007-09-05         4     5
b2   35 Balboa         2007-09-23         5     23
b2   35 Miami         2007-09-27         6     27
b2   35 Savannah           2007-09-28         7     28
b2   35 Charleston       2007-10-01               8     31
b2   35 Newark         2007-10-03         9     33
..
..
b2               36
...             ..
b3               36
...
要得到:

services   week     POL               Balboa     Miami     Savannah     Charleston     Newark
b2               35         Shanghai     09-23       09-27     09-28           10-01               10-03
b2               35         Yantian       09-25       09-29     09-30           10-03               10-05
b2               35         HK                 09-28       09-02     09-03           10-06               10-08    
b2               35         Busan           ..             ..        

也就是说以   services和   week为条件分别计算出POL到POD的时间,
例如:Shanghai的tt为0,所以他的时间就是POD对应的ETADate的时间加上0,
Yantian的tt为2,所以他的时间就是POD对应的ETADate的时间加上2,
依次类推..

请大哥帮忙~~


------解决方案--------------------
/*如果POD列不固定,则需要用动态语句,改用下面的存储过程*/
---创建存储过程
Create Procedure Pro_Test
@services Varchar(8),
@week int
As
Set NoCount On
Begin
Declare @sql Varchar(8000)
Set @sql= ' '
Select @sql=@sql+ ',Max(Case B.POD When ' ' '+B.POD+ ' ' '
Then Right(Convert(Varchar(10),Dateadd(dd,A.tt,B.ETADate),120),5) Else ' ' ' ' End) As [ '+B.POD+ &#