根据 SQL Server 中的其他列值推断一列的值

Nit2702

如果一天的运行速度> 0,则其状态为真。

如果某一天没有数据,则推断记录的最后状态代码(
表中的另一列)值,如果该值为零,则将运行状态标记为真。对于非零标记状态为假的代码。

见下表

Day       Run speed Statuscode  Status  
---------------------------------------
1-Jan-14    55         0        TRUE  
2-Jan-14    60         0        TRUE  
3-Jan-14    58         0        TRUE  
4-Jan-14    61         0        TRUE  
5-Jan-14    57         0        TRUE  
6-Jan-14    56         0        TRUE  
7-Jan-14    60         0        TRUE  
8-Jan-14                        TRUE  
9-Jan-14                        TRUE  
10-Jan-14   55         0        TRUE  
11-Jan-14   56         0        TRUE  
12-Jan-14   60         0        TRUE  
13-Jan-14    0        20        FALSE  

(例如 8-jan-14/9-jan-14 没有价值,但由于上次记录的是第 7 天,这就是为什么这两个日期的状态也是如此的原因)

迈克尔·古德

使用OUTER APPLY更灵活的滞后

现场测试:http : //sqlfiddle.com/#!18/4c73f/18

select 
    o.*,
    Status = 
        convert(bit,
            case 
                when o.RunningSpeed > 0 
                or   o.RunningSpeed is null and prev.StatusCode = 0 then 
                    1
                else 
                    0
            end)    
from tbl o
outer apply
(
    select top 1 StatusCode
    from tbl i
    where i.Day < o.Day and i.StatusCode is not null
    order by i.Day desc
) prev

输出:

|                  Day | RunningSpeed | Statuscode | Status |
|----------------------|--------------|------------|--------|
| 2014-01-01T00:00:00Z |           55 |          0 |   true |
| 2014-01-02T00:00:00Z |           60 |          0 |   true |
| 2014-01-03T00:00:00Z |           58 |          0 |   true |
| 2014-01-04T00:00:00Z |           61 |          0 |   true |
| 2014-01-05T00:00:00Z |           57 |          0 |   true |
| 2014-01-06T00:00:00Z |           56 |          0 |   true |
| 2014-01-07T00:00:00Z |           60 |          0 |   true |
| 2014-01-08T00:00:00Z |       (null) |     (null) |   true |
| 2014-01-09T00:00:00Z |       (null) |     (null) |   true |
| 2014-01-10T00:00:00Z |           55 |          0 |   true |
| 2014-01-11T00:00:00Z |           56 |          0 |   true |
| 2014-01-12T00:00:00Z |           60 |          0 |   true |
| 2014-01-13T00:00:00Z |            0 |         20 |  false |

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据SQL Server中的其他列条件找出一列的最大值和最小值

根据 SQL Server 中其他列的值在列内进行划分

如何根据sql server中其他列中的值插入新行?

SQL:我需要一列根据其他列的值自动更新其值

根据每个 customerID 的另一列中的值重置运行总计 - SQL Server

SQL Server查询以查找按一列分组但在其他至少一列中不同的值

如何从表中选择一列,并根据SQL Server中该列中的值获得第n行?

SQL Server 2012-根据另一列的值重置运行总计

根据SQL Server中另一个列值的条件返回更新的列值

如何添加一个新列,以根据SQL Server中另一列的值来标记该列的重复项?

根据SQL Server中的条件从表中检索列值

SQL根据另一列中的值从一列中选择值

根据一列值联接SQL表中的多行

根据 SQL 中的另一列过滤值

SQL:如何根据SQL中另一列中的值范围对一列求和?

SQL Server:根据一列分组并根据另一列获取列

根据SQL Server中的列值联接表

根据sql server 2008中的列值显示行

在 SQL Server 中根据当前日期更改列的值

根据列 SQL Server 中的最大值选择行

根据SQL Server中的行值在查询中分隔列

如何根据列的值在sql server中获取行

Sql server - 根据另一列查找列的范围

SQL Server:根据上一行/ id中的值计算列值

如何根据SQL中另一列的值过滤一列

根据列值返回 SQL Server 列名和对应值

sql - Postgresql,根据其他列值增加列

如何根据其他列值 SQL SUM() 列

无法根据SQL Server中另一列的条件从列中检索不同的行