Sql 比较所有值为空时的最大值

Sql 比较所有值为空时的最大值,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有这个表结构和示例数据以及查询。 我期望结果集中有2行。如果该特定代码不存在除NULL以外的任何事务,则应将NULL作为最大值。 在我的例子中,它要么只启用所有3行,max transaction no忽略空值行 预期产出: CREATE TABLE NULLTEST(TransactioNo INT, Code VARCHAR(25)); INSERT INTO NULLTEST VALUES (NULL, 'TEST1'); INSERT INTO NULLTEST VALUES (NU

我有这个表结构和示例数据以及查询。 我期望结果集中有2行。如果该特定代码不存在除NULL以外的任何事务,则应将NULL作为最大值。 在我的例子中,它要么只启用所有3行,max transaction no忽略空值行

预期产出:

CREATE TABLE NULLTEST(TransactioNo INT, Code VARCHAR(25));

INSERT INTO NULLTEST VALUES (NULL, 'TEST1');
INSERT INTO NULLTEST VALUES (NULL, 'TEST2');
INSERT INTO NULLTEST VALUES (1,    'TEST2');

SELECT * FROM NULLTEST T
WHERE ISNULL(TransactioNo, 1) = (SELECT MAX(ISNULL(TransactioNo, 1)) FROM NULLTEST N)
您的查询如下:

TransactionNo  Code
NULL           TEST1
1              TEST2
这意味着一切

ISNULLTransactioNo,1始终是1,并且 选择MAXISNULLTransactioNo,NULLTEST中的1也总是1

查看预期输出后编辑:仍然不需要where语句

您可以简单地使用MAX函数和GROUPBY子句

分组依据和最大值后的查询:

结果:

SELECT Code,MAX(TransactioNo) as TransactioNo
FROM NULLTEST
GROUP BY Code

请尝试下面的聚合函数MAX

只需按代码字段分组,然后按TransactioNo字段通过MAX函数获得分组列的最大值:


如果您不满意,可以忽略值为null的ID,您可能会看到以下代码段:

SELECT 
  MAX( test.TransactioNo) TransactionNo
, test.Code
FROM NULLTEST test
GROUP BY test.Code

添加预期结果@PrashantPimpale补充道
SELECT Code,MAX(TransactioNo) as TransactioNo
FROM NULLTEST
GROUP BY Code
---------------------
Code    TransactioNo
---------------------
TEST1     NULL
TEST2      1
---------------------
SELECT Code,MAX(TransactioNo) as TransactioNo 
FROM NULLTEST T 
GROUP BY Code
SELECT 
  MAX( test.TransactioNo) TransactionNo
, test.Code
FROM NULLTEST test
GROUP BY test.Code
select max(id) from nullest where id is not null;
 -- nullest is the table name..