有一张表格,其中一列是飞机总重量,一列是记录号,记录号连续且从21801开始编号,飞机总重量从记录号21836开始才有数据,往后每隔64行有一个数,别的地方都为空。
请写一段SQL实现这样的功能:填充飞机总重量为空的地方,且其值为原表格中位于该位置以上的那个不为空的元素的值(其实就是把21836、21900.这些地方值填到它下面的63个空里),怎么弄?
这里弄了个,因为没用过,所以请大伙帮忙看看对不对。不对的给个标准答案啊UPDATE data 
SET data.飞机总重量 = 
(SELECT 飞机总重量 
FROM data as b
WHERE (b.记录号-21836)%64==0 AND b.记录号<data.记录号) 
WHERE data.记录号>21836 AND data.飞机总重量 is null

解决方案 »

  1.   

    是不是这个意思?declare @table table (id int,col varchar(1))
    insert into @table
    select 1,'a' union all
    select 2,null union all
    select 3,null union all
    select 4,null union all
    select 5,'b' union all
    select 6,null union all
    select 7,null union all
    select 8,null union all
    select 9,'c' union all
    select 10,null union all
    select 11,null union all
    select 12,nullselect * from @table
    /*
    id          col
    ----------- ----
    1           a
    2           NULL
    3           NULL
    4           NULL
    5           b
    6           NULL
    7           NULL
    8           NULL
    9           c
    10          NULL
    11          NULL
    12          NULL
    */declare @i varchar(10)
    update @table
    set @i=isnull(col,@i),col=@i
    select * from @table
    /*
    id          col
    ----------- ----
    1           a
    2           a
    3           a
    4           a
    5           b
    6           b
    7           b
    8           b
    9           c
    10          c
    11          c
    12          c
    */
      

  2.   


    结果是您说的那样,SQL语句是什么样的?
      

  3.   

    前面的是ORACLE语句吧?哪里都适用吗?
      

  4.   

    CREATE TABLE #temp
    (
    飞机总重量 INT,
    记录号 INT
    )
    INSERT #temp
    SELECT NULL, 21801 UNION ALL
    SELECT NULL, 21802 UNION ALL
    SELECT NULL, 21803 UNION ALL
    SELECT 5000, 21836 UNION ALL
    SELECT NULL, 21837 UNION ALL
    SELECT NULL, 21838 UNION ALL
    SELECT NULL, 21839
    GO
    --SQL:
    UPDATE T
    SET 飞机总重量 = 
    CASE 
    WHEN EXISTS(SELECT 1 FROM #temp WHERE 记录号 < T.记录号 AND 飞机总重量 >= 0) --飞机总重量 >= 0 根据业务可更改
    THEN (SELECT TOP(1) 飞机总重量 FROM #temp WHERE 记录号 < T.记录号 AND 飞机总重量 >= 0 ORDER BY 记录号 DESC)
    ELSE NULL
    END
    FROM #temp T
    WHERE 飞机总重量 IS NULL
    --RESULT:
    SELECT * FROM #temp
    /*
    NULL 21801
    NULL 21802
    NULL 21803
    5000 21836
    5000 21837
    5000 21838
    5000 21839
    */
      

  5.   

    这是sql server 。。oracle估计运行不了
      

  6.   

    ORACLE的不清楚 SQL SERVER的在6楼
    ORACLE的建议去相应版问问