有一张表格,其中一列是飞机总重量,一列是记录号,记录号连续且从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
请写一段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
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
*/
结果是您说的那样,SQL语句是什么样的?
(
飞机总重量 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
*/
ORACLE的建议去相应版问问