3

我有一个看起来有点像这样的查询:

SELECT weekEnd, MAX(timeMonday)
FROM timesheet
GROUP BY weekEnd

timeMonday 的有效值为:null、-1、0、1-24。目前,MAX() 将这些值的优先级按 null、-1、0、1-24 的顺序排列,但我真正想要的是 -1、null、0、1-24,因此 null 被认为更高比-1。我知道 MAX 不能做到这一点,那么实现它的最简单方法是什么?

4

3 回答 3

2

SELECT weekEnd, MAX(coalesce(timeMonday,-.5)) FROM timesheet GROUP BY weekEnd

然后将 -.5 转换回 null

于 2009-09-10T15:59:23.817 回答
1
SELECT weekEnd, CASE WHEN maxTimeMonday = -0.5 THEN NULL ELSE maxTimeMonday END maxTimeMonday 
FROM (
   SELECT weekEnd, MAX(CASE WHEN timeMonday IS NULL THEN -0.5 ELSE timeMonday END) maxTimeMonday 
     FROM timesheet
    GROUP BY weekEnd) T

在计算 MAX 时将 NULL 替换为 -0.5,然后将其恢复为 NULL。

(MS SQL Server 语法)

于 2009-09-10T15:56:27.410 回答
1
SELECT weekEnd, MAX(COALESCE(timeMonday, '-0.1'))
FROM timesheet
GROUP BY weekEnd

编辑:没有测试过这个

SELECT weekEnd, REPLACE(MAX(COALESCE(timeMonday, '-0.1')), '-0.1', 'null')
FROM timesheet
GROUP BY weekEnd
于 2009-09-10T15:58:30.667 回答