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)
我具有此表结构和示例数据以及查询。 我期望结果集中有2行。如果该特定代码没有其他事务(空值除外),则应将NULL值设为最大值。 在我的情况下,它要么仅在最大事务中就给所有3行,要么忽略了NULL值行。
预期输出:
TransactionNo Code
NULL TEST1
1 TEST2
答案 0 :(得分:2)
您的查询就像:
SELECT * FROM NULLTEST T
WHERE 1=1
这意味着一切
ISNULL(TransactioNo, 1)
始终为1,
(SELECT MAX(ISNULL(TransactioNo, 1)) FROM NULLTEST N)
也总是1
在看到预期的输出后进行编辑:(仍然不需要where语句)
SELECT TransactioNo ,max(Code ) as Code
FROM NULLTEST
group by TransactioNo
答案 1 :(得分:1)
您可以简单地将MAX()
函数与GROUP BY
子句一起使用
在Group by
和MAX()
之后进行查询:
SELECT Code,MAX(TransactioNo) as TransactioNo
FROM NULLTEST
GROUP BY Code
结果:
---------------------
Code TransactioNo
---------------------
TEST1 NULL
TEST2 1
---------------------
答案 2 :(得分:0)
尝试以下方法,使用聚合函数MAX
SELECT Code,MAX(TransactioNo) as TransactioNo
FROM NULLTEST T
GROUP BY Code
答案 3 :(得分:0)
只需按Code
字段分组,然后通过MAX
字段的TransactioNo
函数获得分组列的最大值:
SELECT
MAX( test.TransactioNo) TransactionNo
, test.Code
FROM NULLTEST test
GROUP BY test.Code
答案 4 :(得分:0)
假设TransactioNo不能为负,只需将ISNULL(TransactioNo, 1)
更改为ISNULL(TransactioNo , -1)
。您需要使查询相关:
SELECT * FROM NULLTEST T
WHERE ISNULL(TransactioNo, -1) = (
SELECT MAX(ISNULL(TransactioNo, -1))
FROM NULLTEST N
WHERE N.Code = T.Code
)
答案 5 :(得分:0)
如果您不满意,可以省略值为null的id,您可能会看到以下代码段:
select max(id) from nullest where id is not null;
-- nullest is the table name..