SQL查询根据每月的天数从行动态创建列

时间:2014-02-19 15:25:43

标签: sql sql-server tsql sql-server-2000

我需要创建TSQL查询,该查询根据当月的天数返回列,如果是周末,则使用上一个工作日值。

我有表格,我们在费率表中为每天(工作日)的每个证券添加价格。我们在表中有1700个证券,因此我们每个工作日增加1700个证券价格。

我们不会为周末增加价格

表格如下..........

**SECID           DATE           RATE**

AN8068571086            01/01/2014              89.84
AT0000606306            01/01/2014          0.68
AT0000818802            01/01/2014          105.00
BBG000BNSZP1            01/01/2014            0.00
BBG005MWN105            01/01/2014            0.00
BE0003565737            01/01/2014           41.13
BE0003796134            01/01/2014            0.04
BE0117584202            01/01/2014            1.02
BE0119198829            01/01/2014            1.00
BE0374557404            01/01/2014            1.13
BE0932894455            01/01/2014            0.30
BE0934378747            01/01/2014            1.02
BE0934531337            01/01/2014            1.00
BE0934924383            01/01/2014            0.01
BE0934986036            01/01/2014            1.49
BMG5876H1051            01/01/2014           14.52
BMG6260K1264            01/01/2014            0.02
BMG6260K1264XHKG        01/01/2014            0.24
BMG657731060            01/01/2014            9.77
CA00829Q1019            01/01/2014           55.50
AN8068571086            02/01/2014                89.84
AT0000606306            02/01/2014            0.68
AT0000818802            02/01/2014          105.00
BBG000BNSZP1            02/01/2014            0.00
BBG005MWN105            02/01/2014            0.00
BE0003565737            02/01/2014           41.13
BE0003796134            02/01/2014            0.04
BE0117584202            02/01/2014            1.02
BE0119198829            02/01/2014            1.00
BE0374557404            02/01/2014                1.13
BE0932894455            02/01/2014            0.30
BE0934378747            02/01/2014            1.02
BE0934531337            02/01/2014            1.00
BE0934924383            02/01/2014            0.01
BE0934986036            02/01/2014            1.49
BMG5876H1051            02/01/2014           14.52
BMG6260K1264            02/01/2014            0.02
BMG6260K1264XHKG        02/01/2014            0.24
BMG657731060            02/01/2014            9.77
CA00829Q1019            02/01/2014           55.50





SECID        01/01/2014 02/01/2014 03/01/2014 04/01/2014 05/01/2014 06/01/2014........ 31/01/2014
A                                           
AN8068571086            89.84   89.12   88.56   88.56   88.56   87.55
AT0000606306            0.68    0.68    0.68    0.68    0.68    0.68
AT0000818802            105 107 105 105 105 102.5
BBG000BNSZP1                                
BBG005MWN105            0   0   0   0   0   0
BE0003565737            41.135  40.4    41.005  41.005  41.005  41.27
BE0003796134            0.04    0.04    0.04    0.04    0.04    0.04
BE0117584202            1.024   1.024   1.024   1.024   1.024   1.024
BE0119198829            1   1   1   1   1   1
BE0374557404            1.13279 1.13281 1.13303 1.13303 1.13303 1.13428
BE0932894455            0.3062  0.3062  0.3062  0.3062  0.3062  0.3062
BE0934378747            1.02217 1.02089 1.0192  1.0192  1.0192  1.02051
BE0934531337            1   1   1   1   1   1
BE0934924383            0.0114254   0.0114504   0.0114628   0.0114628   0.0114628   0.0114888
BE0934986036            1.49556 1.49624 1.49735 1.49735 1.49735 1.50383
BMG5876H1051            14.52   14.09   14.08   14.08   14.08   14.57
BMG6260K1264            0.02    0.02    0.03    0.03    0.03    0.0222
BMG6260K1264XHKG        0.241   0.24    0.235   0.235   0.235   0.237
BMG657731060            9.77    9.57    9.56    9.56    9.56    9.76
CA00829Q1019            55.5    56.75   56.75   56.75   56.75   56.75
CA0329001022            0.015   0.015   0.015   0.015   0.015   0.015
CA0679011084            17.48   18.18   18.42   18.42   18.42   18.32
CA067901184                                 
CA09228F1036            7.4 7.61    7.54    7.54    7.54    7.84
CA1319111094            1.78    1.8 1.77    1.77    1.77    1.78
CA2768551038            0.075   0.075   0.075   0.075   0.075   0.075
CA29250N1050            43.71   43.44   43.29   43.29   43.29   42.7
CA3359341052            19.1    19.13   19.03   19.03   19.03   19.05
CA3809564097            21.67   22.57   22.66   22.66   22.66   22.45
CA42979J1075            1.39    1.39    1.39    1.39    1.39    1.39
CA5503721063            4.59    4.62    4.66    4.66    4.66    4.58
CA6565685089            0.0081  0.0086  0.0081  0.0081  0.0081  0.0096
CA656585089             0.0081  0.0086  0.0081  0.0081  0.0081  0.0096
CA71921K1021            0.045   0.045   0.045   0.045   0.045   0.045

我需要创建以下列方式返回值的查询。返回的列数将取决于该月份的天数(包括周末)。

我们无法使用数据透视,因为数据库兼容级别是SQL 2000.我使用的是SQL 2005服务器

正如您在结果中看到的那样,我在1月份的每一天获得一列,而在周末(1月4日和5月)的时候,它会使用最后一个工作日(1月3日)的价格。

我已经尝试过,但无法理解这个问题。我不想对每个(日)列进行硬编码,因为在某个月我们会有30天或28天。

0 个答案:

没有答案