Col1 -用户输入日期
Col2 -日历日期
Col3 - Col1中日期的差异
Col4 -条目数量
目前的数据是什么样子的:
我试图用'Col1'和'Col3'上面的值填充'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