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

SQL SEVRER怎么给空值填下跟下一行一样的值

2013-01-05 
SQL SEVRER如何给空值填上跟上一行一样的值订单订单明细数量 201101201101011201101022 20110220110201120

SQL SEVRER如何给空值填上跟上一行一样的值
订单   订单明细   数量
 201101  20110101    1
         20110102    2
 201102  20110201    1
         20110202    3
类似这样的订单这一列有的值为空,但是计算的时候需要按上面的值,需要订单都填上
各位大虾门都来看看哈!
 
 
[解决办法]
with TB as(select *,row_number() over(order by getdate()) as rowid from Tablename
select isnull(订单,(select top 1 订单 from TB where not 订单 is null and rowid<a.rowid order by rowid desc )) as 订单,订单明细,数量
from TB as a
[解决办法]

--CREATE TABLE huang(订单  INT, 订单明细  int, 数量 int )
 --INSERT INTO huang
 --SELECT  201101,  20110101  ,  1
 --UNION ALL 
 --SELECT NULL ,20110102,    2
 --UNION ALL 
 --SELECT 201102,  20110201 ,   1
 --UNION ALL 
 --SELECT  NULL ,20110202 ,   3
 
 WITH    cte
           AS ( SELECT   ROW_NUMBER() OVER ( ORDER BY GETDATE() ) id ,
                         *
                FROM     Huang
              ),
         cte1
           AS ( SELECT   *
                FROM     cte
                WHERE    id = 1
                UNION ALL
                SELECT   b.id ,
                         CASE WHEN b.订单 IS NULL THEN a.订单
                              ELSE b.订单
                         END 订单 ,
                         b.订单明细 ,
                         b.数量
                FROM     cte1 a


                         INNER JOIN cte b ON a.id = b.id - 1
              )
     SELECT  订单,          订单明细  ,      数量
     FROM    cte1
 
 /*
 订单          订单明细        数量
 ----------- ----------- -----------
 201101      20110101    1
 201101      20110102    2
 201102      20110201    1
 201102      20110202    3
 
 (4 行受影响)
 
 */


[解决办法]

--测试数据
if OBJECT_ID('Test_20121204') is not null drop table Test_20121204
go
CREATE TABLE Test_20121204(订单  int, 订单明细  int, 数量 int )
 INSERT INTO Test_20121204
 SELECT  201101,20110101,1  UNION ALL 
 SELECT  NULL,20110102,2UNION ALL 
 SELECT  201102,20110201,1  UNION ALL 
 SELECT  NULL ,20110202 ,3
 
 --查询
 ;with T as(
 select ROW_NUMBER() over(order by getdate())id,* from Test_20121204
 )
 select isnull(t1.订单,t2.订单)订单,t1.订单明细,t1.数量 from T t1 left join T t2 
 on t1.id=t2.id+1
 
 --查询结果
 /*
 订单          订单明细        数量
----------- ----------- -----------
201101      20110101    1
201101      20110102    2
201102      20110201    1
201102      20110202    3

(4 行受影响)
 */
 
 --删除测试数据
 drop table Test_20121204

热点排行
Bad Request.