sql-server - 由不同用户运行时,SQL 查询中出现 MAX 和 COALESCE 的奇怪结果
问题描述
我有一个 SQL Server 查询,它试图选择列中NULL
是否至少有一个或存储为的最新日期NULL
PredComplDate
NVARCHAR(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
预期的结果NULL
是LastestPredComplDate
解决方案
也许您可以将这两个子句放在您的窗口函数中,如下所示(如果只是为了清楚起见):
MAX(CASE WHEN LEN(Predecessors)>0 THEN NULL ELSE PredComplDate END) AS LatestPredComplDate
推荐阅读
- c# - 在 C# 中检查带有通配符的 url
- c - C 问题:为什么我的 20 长度字符串限制为 6 个字符?
- java - 在服务外部改造本身的 onReponse() 之后在当前活动中执行函数
- java - 如何在 Java 中的 JPanel 的边框中写入文本?
- java - Tensorflow Lite Android 应用程序因 NullPointerException 'void org.tensorflow.lite.Interpreter.run(java.lang.Object, java.lang.Object)' 而崩溃
- api - GET https://graph.microsoft.com/beta/me/devices 时的 500 错误响应
- google-apps-script - TypeError:无法读取应用脚本中未定义(第 11 行,文件“代码”)的属性“参数”
- neo4j - Neo4j:将节点与具有相同名称的特定节点相关联
- c# - 如何将特殊字符包含到 XAML 静态多语言资源中?
- testing - AUTOTOOLS:使用我自己的测试套件而不是默认的