declare @Itype [nchar] (10)=N'I'
update [ITest] set Itype=@Itype,@Itype=case when Itype is null then @Itype else Itype end

解决方案 »

  1.   

    我个人的想法是用 row_number 先编号,然后在处理,但一直没写出来..期待答案
      

  2.   

    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