2014-12-02 36 views
0

我有一个表是这样的:我如何比较和保持一定的价值:SQL Server 2008 R2的

ITEM | DATE | PRICE | NEW_PRICE | REDUCTION | 
Pencil | 01/10/14 | 25 | 21  |  4  | 
Pencil | 01/12/14 | 21 | 21  |  0  | 
Pencil | 01/30/14 | 21 | 21  |  0  | 
Pencil | 02/05/14 | 21 | 18  |  3  | 
Pencil | 02/17/14 | 18 | 18  |  0  | 
Pencil | 03/20/14 | 18 | 18  |  0  | 
Pencil | 06/08/14 | 18 | 16  |  2  | 
Pencil | 07/14/14 | 16 | 16  |  0  | 
Pencil | 07/28/14 | 16 | 16  |  0  | 

如何选择,所以我可以得到的结果是这样的:

ITEM | DATE | PRICE | NEW_PRICE | REDUCTION | REDUCTION_HOLD | 
Pencil | 01/10/14 | 25 | 21  |  4  |  4  | 
Pencil | 01/12/14 | 21 | 21  |  0  |  4  | 
Pencil | 01/30/14 | 21 | 21  |  0  |  4  | 
Pencil | 02/05/14 | 21 | 18  |  3  |  3  | 
Pencil | 02/17/14 | 18 | 18  |  0  |  3  | 
Pencil | 03/20/14 | 18 | 18  |  0  |  3  | 
Pencil | 06/08/14 | 18 | 16  |  2  |  2  | 
Pencil | 07/14/14 | 16 | 16  |  0  |  2  | 
Pencil | 07/28/14 | 16 | 16  |  0  |  2  | 

提前致谢。

回答

0

尝试一个子查询:

SELECT ITEM = 'Pencil', DATE = '01/10/14', PRICE = 25, NEW_PRICE = 21 , REDUCTION = 4 INTO #Table 
UNION ALL SELECT 'Pencil' ,'01/12/14'  ,21  ,21   ,0 
UNION ALL SELECT 'Pencil' ,'01/30/14'  ,21  ,21   ,0 
UNION ALL SELECT 'Pencil' ,'02/05/14'  ,21  ,18   ,3 
UNION ALL SELECT 'Pencil' ,'02/17/14'  ,18  ,18   ,0 
UNION ALL SELECT 'Pencil' ,'03/20/14'  ,18  ,18   ,0 
UNION ALL SELECT 'Pencil' ,'06/08/14'  ,18  ,16   ,2 
UNION ALL SELECT 'Pencil' ,'07/14/14'  ,16  ,16   ,0 
UNION ALL SELECT 'Pencil' ,'07/28/14'  ,16  ,16   ,0 

GO 

SELECT * 
, REDUCTION_HOLD = (SELECT TOP 1 REDUCTION FROM #Table b WHERE a.DATE >= b.DATE AND b.REDUCTION > 0 ORDER BY b.DATE DESC) 
FROM #Table a ORDER BY DATE 

结果:

enter image description here

+0

工作就像一个魅力,Mr.Bjørnbeth,你救了我的一天!谢谢 ! :d – RahdixC9 2014-12-02 08:34:13