热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

在SQL中,是否有类似COALESCE()的条件来限定非NULL的列值?

如何解决《在SQL中,是否有类似COALESCE()的条件来限定非NULL的列值?》经验,为你挑选了1个好方法。

我有一个"Order"Table which houses "Status"Column. Values under Status = ('Completed','Sold','In-Process','Released','NotStarted')

即使表中没有序列或层次结构,我们也可以如下感知序列。

1   NotStarted
2   Released
3   In-Process
4   Sold
5   Completed

因此,“已完成”是最高状态,每个订单都要经过这些状态,直到它们完成为止。如果尚未完成,则应处于其他状态之一。

当我筛选完成时,我会错过其他记录。当我包含所有状态时,我会获得多个相同订单的记录,例如1个记录为Released,1个记录为InProcess,等等(即订单的各个阶段)

select * from OrderTable
where Status = 'Completed'

我想有能力做这样的事情- COALESCE(Completed,Sold,In-Process,Released,NotStarted, NULL)

换句话说,我想获得该状态的最高记录,而每个订单仅获得1条记录。

这可能在Sql中吗?



1> JNevill..:

一种选择是ROW_NUMBER()与Case表达式一起使用以建立您的订单。

SELECT *
FROM
    (
       SELECT OrderNumber,
        Status,
        ROW_NUMBER() OVER (PARTITION BY OrderNumber ORDER BY 
                           CASE Status 
                               WHEN 'NotStarted' THEN 1
                               WHEN 'Released' THEN 2
                               WHEN 'In-Process' THEN 3
                               WHEN 'Sold' THEN 4
                               WHEN 'Completed' THEN 5 
                               END DESC) as Order_Status_Rank
        FROM OrderTable
    ) dt
WHERE Order_Status_Rank = 1;

在这里看到它的作用


推荐阅读
author-avatar
朱美萍客户
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有