如何在SQL Server 2014中添加3个等于上一行的新行?

时间:2017-06-22 16:50:09

标签: sql-server

想知道我是否可以使用某种先前的价值功能。我正在努力扩大"小时"列,因此它可以对应于" MinuteOfDay"柱。所以它看起来像

[Table]

等等。我是SQL的新手

2 个答案:

答案 0 :(得分:0)

我认为这个递归cte完全符合您的要求:

 with cte 
 as 
 (select 2400 as HH, 0 as MM
 UNION ALL
 select (HH + 25) as HH, MM + 15 as MM from cte where MM < 1500)
 select CASE WHEN (HH/100) % 25  = 24 THEN 24
        ELSE (HH/100) % 25 + 1 
        END as HH, MM from cte where MM <= 1425;

无需创建任何表格或任何内容。

答案 1 :(得分:0)

我会按照你的要求在黑暗中拍摄。我假设你真的希望小时在午夜为0,因为24:00不是有效时间。

我正在为此解决方案使用计数表。它们对如此多的东西非常有用,我会像这样对我的系统进行观察。

创建视图[dbo]。[cteTally]为

WITH
    E1(N) AS (select 1 from (values (1),(1),(1),(1),(1),(1),(1),(1),(1),(1))dt(n)),
    E2(N) AS (SELECT 1 FROM E1 a, E1 b), --10E+2 or 100 rows
    E4(N) AS (SELECT 1 FROM E2 a, E2 b), --10E+4 or 10,000 rows max
    cteTally(N) AS 
    (
        SELECT  ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) FROM E4
    )
select N from cteTally
GO

这允许我在需要时重复使用它。我们非常有效地利用这个计数表来处理这类事情。

SELECT MyHour = H.N - 1
    , MyMinutes = ((H.N - 1) * 60) + (M.N - 1) * 15
FROM dbo.cteTally H
CROSS JOIN dbo.cteTally M
where H.N <= 24
    AND M.N <= 4