代码之家  ›  专栏  ›  技术社区  ›  Pure.Krome

这就是COALESCE在这个mssql查询中的工作方式:orderbycoalesce([UpdatedOn],[CreatedOn])DESC

  •  -1
  • Pure.Krome  · 技术社区  · 4 年前

    我在复习一些使用 COALESCE 声明 ORDER BY . 我读过关于 聚结 所以我想知道,在这种情况下,我是否了解它是如何被使用的。

    ORDER BY COALESCE([UpdatedOn], [CreatedOn]) DESC
    

    是不是想说这个(通过我编造的一些虚假数据):

    yyyy-mm-dd

     ELID |  LK   |  CreatedOn |  UpdatedOn | Computed-OrderBy
    +---------------------------------------------------------
        1 | 'aaa' | 2020-01-01 | 2020-01-02 | 2020-01-02
        2 | 'bbb' | 2020-01-01 |       NULL | 2020-01-01
    

    因此,这就是结果(在内存中,等等),SQLServer将在 Computer-OrderBy

    所以结果是有序的:

    ELID 2 - 2020-01-01
    ELID 1 - 2020-01-02
    

    更新1:如果 聚结 SELECT 声明,那么我就不会问问题了,因为我喜欢问。我在问什么时候 订货人 “正在加载…”。。SQL sorta是如何做到的,在幕后。注意我怎么编了一个新专栏 Computed-OrderBy ? 好吧,我想看看Sql Server是不是就是这么做的。。。所以它知道如何通过 “计算”值。

    1 回复  |  直到 4 年前
        1
  •  2
  •   Thom A    4 年前

    根据文件 COALESCE (Transact-SQL)

    SELECT COALESCE(NULL, NULL, 'third_value', 'fourth_value'); 返回第三个值,因为第三个值是第一个不为null的值。

    事实上 COALESCE 是在 ORDER BY 聚结 将返回 UpdatedOn NULL 值,然后是 CreatedOn . 如果两者都是 无效的

    ,则结果将根据表达式的结果按(升序)顺序排列,其中的行具有 为被视为具有最低值的表达式和日期返回 9999-12-31