我有另一个关于 Oracle 中 Nulls 的问题。
我有一个用作会话表的小表。每行都是一个特定的会话。如果会话成功完成,则最后一列指示版本号,如果会话被删除,则为 null。
此列可以为空,我想在 sessionNumber 变量中选择最大版本号或空。这是我设置的原始文件
SELECT MAX (VerNumber) INTO sessionNumber
FROM Table_A
WHERE sessionDate = -- some date
AND VerNumber IS NOT NULL;
当 col 为空时,这将返回一行
我试过像这样使用NVL
SELECT NVL(MAX (VerNumber),NULL) INTO sessionNumber
FROM Table_A
WHERE sessionDate = -- some date
AND VerNumber IS NOT NULL;
希望消除混淆,NOT NULL 条件的存在是为了防止同一用户在同一日期进行额外会话。TBH 在这种情况下,即使删除了 NOT NULL 条件,我仍然会返回一个(空)行。我认为 Null 和聚合函数缺少一些东西。
但它不起作用。我还看到了可以在哪里使用异常,但这似乎是一个复杂的修复。
非常感谢任何指导。
谢谢。
根据要求进一步澄清。
我的表有四列 user、date、state 和 verNumber
用户和日期是标识符列(不是正式的 PK,但您可以这样查看)。
state 指示会话是否已完成 verNumber 指示该日期的会话完成的次数,如果该日期的会话没有完成,则可以为空。
我有一个变量 sessionNumber,我想分配该日期可用的 MAX(VerNumber) 或当日期不可用或 VerNumber 中的值为 null 时为 null。
Table_A 中的示例行
USER | DATE | STATE | VERNUMBER
'AName' | 2012-06-25 | 'YES' | 1
'CName' | 2012-06-25 | 'YES' | 2
'BName' | 2012-06-26 | 'NO' | --NULL
所以对于日期 06-25,我希望 2 是值,对于 06-26,我希望为空。