SQL复制重复



我试图用'Col1'和'Col3'上面的值填充'Col4'空值。以下是对这些专栏的简要解释:

  • Col1 -用户输入日期
  • Col2 -日历日期
  • Col3 - Col1中日期的差异
  • Col4 -条目数量
  • 目前的数据是什么样子的:

     |   Col1          |   Col2          |   Col3       |   Col4
     |   2016-01-01    |   2016-01-01    |   3          |   $10
     |   null          |   2016-01-02    |   null       |   null
     |   null          |   2016-01-03    |   null       |   null
     |   2016-01-04    |   2016-01-04    |   1          |   $2
     |   2016-01-05    |   2016-01-05    |   2          |   $7
     |   null          |   2016-01-06    |   null       |   null
     |   2016-01-07    |   2016-01-07    |   3          |   $5
     |   null          |   2016-01-08    |   null       |   null
     |   null          |   2016-01-09    |   null       |   null
    
    预期结果:

     |   Col1          |   Col2          |   Col3       |   Col4
     |   2016-01-01    |   2016-01-01    |   3          |   $10
     |   null          |   2016-01-02    |   null       |   $10
     |   null          |   2016-01-03    |   null       |   $10
     |   2016-01-04    |   2016-01-04    |   1          |   $2
     |   2016-01-05    |   2016-01-05    |   2          |   $7
     |   null          |   2016-01-06    |   null       |   $7
     |   2016-01-07    |   2016-01-07    |   3          |   $5
     |   null          |   2016-01-08    |   null       |   $5
     |   null          |   2016-01-09    |   null       |   $5
    

    该公式的工作原理是计算Col3中的数字,然后将Col4中的相应金额复制到下面的行。Col3定义下面有多少行(包括它自己的行)。

    我目前正在使用Sybase。我不知道该怎么做。任何帮助将不胜感激,谢谢。注:这是一个数据样本,日期从2000年到2016年

    在SQL Server中,通过给定的示例数据,我们可以使用CTE

    实现上述结果集。

    样本数据:

    declarE  @Table1 TABLE 
        (Col1 varchar(10), Col2 varchar(10), Col3 varchar(4), Col4 varchar(4))
    ;
    INSERT INTO @Table1
        (Col1, Col2, Col3, Col4)
    VALUES
        ('2016-01-01', '2016-01-01', '3', '$10'),
        (NULL, '2016-01-02', NULL, NULL),
        (NULL, '2016-01-03', NULL, NULL),
        ('2016-01-04', '2016-01-04', '1', '$2'),
        ('2016-01-05', '2016-01-05', '2', '$7'),
        (NULL, '2016-01-06', NULL, NULL),
        ('2016-01-07', '2016-01-07', '3', '$5'),
        (NULL, '2016-01-08', NULL, NULL),
        (NULL, '2016-01-09', NULL, NULL)
    ;
    

    脚本:

    WITH cte 
         AS (SELECT T1.Col1, 
                    T1.Col2,
                    T1.Col3, 
                    Col4 = COALESCE(T1.Col4, (SELECT TOP 1 Col4 
                                          FROM   @Table1 T2 
                                          WHERE  T2.Col2 < T1.Col2
                                                 AND Col4 IS NOT NULL 
                                          ORDER  BY Col2 DESC)) 
             FROM   @Table1 T1) 
    UPDATE T 
    SET    
           T.Col4 = C.Col4 
    FROM   @Table1 T 
           INNER JOIN cte C 
                   ON T.col2 = C.col2 
    WHERE  T.col1 IS NULL 
            OR T.col2 IS NULL 
            OR T.col3 IS NULL 
            Select * from @Table1
    

    相关内容

    • 没有找到相关文章

    最新更新