首页 > 解决方案 > 由不同用户运行时,SQL 查询中出现 MAX 和 COALESCE 的奇怪结果

问题描述

我有一个 SQL Server 查询,它试图选择列中NULL是否至少有一个或存储为的最新日期NULLPredComplDateNVARCHAR(30)

奇怪的是,当我运行查询时,它会返回正确的结果,但是当我的同事在同一台计算机上运行查询时,它会返回不同的结果。

我保存了我的同事以不同名称运行查询时创建的表,并将其与我运行查询时创建的表进行了比较。NULL一切都是一样的,记录数,数据类型等,但查询的以下部分由于某种原因没有返回:

SELECT [Reference Number],
    CASE 
        WHEN LEN(Predecessors)>0 AND MAX(COALESCE(PredComplDate,'31/12/2099'))='31/12/2099' THEN NULL
        ELSE MAX(PredComplDate)
    END AS LatestPredComplDate
    FROM mytable33
    GROUP BY [Reference Number],Predecessors

这个查询有什么问题?

mytable33由我mytable22创建,由我的同事创建。当我查询结果是相同的:

SELECT Predecessors,[Reference Number], PredRefNo,PredComplDate  FROM mytable22

SELECT Predecessors,[Reference Number], PredRefNo,PredComplDate  FROM mytable33

在此处输入图像描述

当我在两个表上运行上述查询时,结果是不同的:

SELECT [Reference Number],
    CASE 
        WHEN LEN(Predecessors)>0 AND MAX(COALESCE(PredComplDate,'31/12/2099'))='31/12/2099' THEN NULL
        ELSE MAX(PredComplDate)
    END AS LatestPredComplDate
    FROM mytable22
    GROUP BY [Reference Number],Predecessors

SELECT [Reference Number],
    CASE 
        WHEN LEN(Predecessors)>0 AND MAX(COALESCE(PredComplDate,'31/12/2099'))='31/12/2099' THEN NULL
        ELSE MAX(PredComplDate)
    END AS LatestPredComplDate
    FROM mytable33
    GROUP BY [Reference Number],Predecessors

在此处输入图像描述

预期的结果NULLLastestPredComplDate

标签: sql-servermaxcoalescecase-when

解决方案


也许您可以将这两个子句放在您的窗口函数中,如下所示(如果只是为了清楚起见):

  MAX(CASE WHEN LEN(Predecessors)>0 THEN NULL ELSE PredComplDate END) AS LatestPredComplDate

推荐阅读