查询结果:my query result
select distinct information.ID, information.Name,information.Time AS OvertimeOff
From Information
where information.Time >='18:00:00' AND information.Time <='20:00:00';
这是我的疑问。我的表没有给定范围之间的值。而且没有结果。所以,我需要的是,如果范围内没有匹配,我需要将列的值设置为'00:00:00'。我怎么能在查询中这样做?
答案 0 :(得分:0)
按照我们在评论中的讨论,您需要比简单的案例表达更复杂的东西。我建议的解决方案涉及使用common table expression,以及case表达式和where子句:
;WITH cte As
(
SELECT id
FROM Information
WHERE Time >= '18:00:00' AND Time <= '20:00:00'
)
SELECT DISTINCT information.ID,
information.Name,
CASE WHEN NOT EXISTS(SELECT 1 FROM cte WHERE cte.Id = information.ID) THEN
'00:00:00'
ELSE
information.Time
END AS OvertimeOff
FROM Information
WHERE
(
information.Time >= '18:00:00'
AND information.Time <= '20:00:00'
)
OR NOT EXISTS(SELECT 1 FROM cte WHERE cte.Id = information.ID);
细分:
cte只是用来缩短子查询(因为它是 在case表达式和where子句中相同。
where子句的NOT EXISTS
部分确保您只获取记录
&#39; 00:00:00&#39;如果没有记录时间介于&lt; 18:00:00&#39;
和&#39; 20:00:00&#39;。
案例表达式现在测试是否有记录 对于具有范围内时间的id,并返回该时间。如果不, 它返回&#39; 00:00:00&#39;
假设我正确理解了这个问题,你需要从where子句中删除条件并将其放在select子句中的case表达式中。
像这样:
SELECT DISTINCT information.ID,
information.Name,
CASE WHEN information.Time >='18:00:00' AND information.Time <='20:00:00' THEN
information.Time
ELSE
'00:00:00'
END AS OvertimeOff
FROM Information;