补空白缺省数据问题

霜寒月冷 2014-06-27 09:05:50
--补空白缺省数据问题

---客户的一张execl 有一列(Itype)单元格列(有规律)合并了,我把数据导入到数据表中出现有空白的情况。现想将之补全
--求思路分析、求解答
if exists (select * from sysobjects where id = OBJECT_ID('[ITest]') and OBJECTPROPERTY(id, 'IsUserTable') = 1)
DROP TABLE [ITest]

CREATE TABLE [ITest] (
[Itype] [nchar] (10) NULL,
[Idata] [nchar] (10) NULL)

INSERT [ITest] ([Itype],[Idata]) VALUES ( N'I',N'39.1')
INSERT [ITest] ([Idata]) VALUES ( N'12.12')
INSERT [ITest] ([Idata]) VALUES ( N'12.22')
INSERT [ITest] ([Idata]) VALUES ( N'253.69')
INSERT [ITest] ([Idata]) VALUES ( N'12.68')
INSERT [ITest] ([Itype],[Idata]) VALUES ( N'II',N'32.143')
INSERT [ITest] ([Idata]) VALUES ( N'35.31')
INSERT [ITest] ([Itype],[Idata]) VALUES ( N'III',N'25.36')
go

--原表数据
--Itype Idata
--I 39.1
--NULL 12.12
--NULL 12.22
--NULL 253.69
--NULL 12.68
--II 32.143
--NULL 35.31
--III 25.36

--期待结果

--Itype Idata
--I 39.1
--I 12.12
--I 12.22
--I 253.69
--I 12.68
--II 32.143
--II 35.31
--III 25.36
...全文
254 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
chen357313771 2014-06-27
  • 打赏
  • 举报
回复
CREATE TABLE #ITest (
[Itype] [nchar]  (10) NULL,
[Idata] [nchar]  (10) NULL)
 
INSERT #ITest ([Itype],[Idata]) VALUES ( N'I',N'39.1')
INSERT #ITest ([Idata]) VALUES ( N'12.12')
INSERT #ITest ([Idata]) VALUES ( N'12.22')
INSERT #ITest ([Idata]) VALUES ( N'253.69')
INSERT #ITest ([Idata]) VALUES ( N'12.68')
INSERT #ITest ([Itype],[Idata]) VALUES ( N'II',N'32.143')
INSERT #ITest ([Idata]) VALUES ( N'35.31')
INSERT #ITest ([Itype],[Idata]) VALUES ( N'III',N'25.36')

SELECT * FROM #ITest

;WITH test1
AS 
(
	SELECT ROW_NUMBER() OVER(ORDER BY GETDATE()) AS ID
		,*
	FROM #ITest
)
,test2 AS 
(
	SELECT *,Itype AS Itype1 FROM test1 WHERE ID =1
	UNION ALL
	SELECT A.*,CASE WHEN A.Itype IS NULL THEN (CASE WHEN B.Itype1 IS NOT NULL  THEN B.Itype1 END)ELSE A.Itype END
	FROM test1 AS A,test2 AS B
	WHERE A.ID=B.ID+1  
)
SELECT IType1 AS Itype,Idata FROM test2
霜寒月冷 2014-06-27
  • 打赏
  • 举报
回复
引用 5 楼 ssp2009 的回复:
[quote=引用 3 楼 chz415767975 的回复:] [quote=引用 1 楼 ssp2009 的回复:] declare @Itype [nchar] (10)=N'I' update [ITest] set Itype=@Itype,@Itype=case when Itype is null then @Itype else Itype end
这个写法只能针对两类的情况。实际类别会很多...[/quote]你试了没[/quote] 不好意思,你的语句是对的,
以学习为目的 2014-06-27
  • 打赏
  • 举报
回复
引用 1 楼 ssp2009 的回复:
declare @Itype [nchar] (10)=N'I' update [ITest] set Itype=@Itype,@Itype=case when Itype is null then @Itype else Itype end
满足楼主的要求,这些法很巧妙
哥眼神纯洁不 2014-06-27
  • 打赏
  • 举报
回复
引用 4 楼 chz415767975 的回复:
我个人的想法是用 row_number 先编号,然后在处理,但一直没写出来..期待答案
1楼的方法更牛
快溜 2014-06-27
  • 打赏
  • 举报
回复
引用 3 楼 chz415767975 的回复:
[quote=引用 1 楼 ssp2009 的回复:] declare @Itype [nchar] (10)=N'I' update [ITest] set Itype=@Itype,@Itype=case when Itype is null then @Itype else Itype end
这个写法只能针对两类的情况。实际类别会很多...[/quote]你试了没
霜寒月冷 2014-06-27
  • 打赏
  • 举报
回复
我个人的想法是用 row_number 先编号,然后在处理,但一直没写出来..期待答案
霜寒月冷 2014-06-27
  • 打赏
  • 举报
回复
引用 1 楼 ssp2009 的回复:
declare @Itype [nchar] (10)=N'I' update [ITest] set Itype=@Itype,@Itype=case when Itype is null then @Itype else Itype end
这个写法只能针对两类的情况。实际类别会很多...
--小F-- 2014-06-27
  • 打赏
  • 举报
回复
引用 1 楼 ssp2009 的回复:
declare @Itype [nchar] (10)=N'I' update [ITest] set Itype=@Itype,@Itype=case when Itype is null then @Itype else Itype end
GOOD JOB
快溜 2014-06-27
  • 打赏
  • 举报
回复
declare @Itype [nchar] (10)=N'I' update [ITest] set Itype=@Itype,@Itype=case when Itype is null then @Itype else Itype end

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧