我最近遇到了在select语句中使用2个CASE语句进行查看的问题。
假设我有一个名为login(emp_num,log_in_date,log_in_time)的表。
请注意,Log_in_date将包含“DD-MM-YY”格式的日期,而log_in_time将格式化为“24HH:MM:SS”
以下是单独运行时的两种情况:
根据一天中的时间计算登录尝试次数
select count(*) as "Logins", Log_Time as "Time Of Day"
from (select(
CASE
when to_char(login.log_in_time, 'HH24:MI:SS') > '12:00:00'
and to_char(login.log_in_time, 'HH24:MI:SS') <= '18:00:00' then 'Afternoon'
when to_char(login.log_in_time, 'HH24:MI:SS') > '18:00:00'
and to_char(login.log_in_time, 'HH24:MI:SS') < '6:00:00' then 'Evening'
else 'Morning'
end ) as Log_Time from login)
group by Log_Time;
结果:
Logins Time of Day
___
13265 morning
16115 afternoon
6709 evening
这是显示每个学期的登录尝试次数的第二个查询:
select count(*) as "Logins", Semester
from (select(
CASE
when login.log_in_date >= '15-AUG-09' and login.log_in_date <= '18-DEC-09' then 'Fall 2009'
when login.log_in_date >= '1-JAN-10' and login.log_in_date <= '15-MAY-10' then 'Spring 2010'
end ) as Semester from login)
group by Semester;
结果:
Logins SEMESTER
---------- -----------
16511 Spring 2010
19578 Fall 2009
我的问题是,如何在select语句中组合这两个CASE语句,以便结果如下:
Logins Time of Day Semester
8292 afternoon Fall 2009
7823 afternoon Spring 2010
3623 evening Fall 2009
3086 evening Spring 2010
7663 morning Fall 2009
5602 morning Spring 2010
我曾尝试将CASE放在where和from子句中,但似乎没有成功。
感谢。
答案 0 :(得分:0)
SELECT COUNT(EMP_NUM) logins,
Log_Time,
Semester
FROM
(SELECT emp_num,
CASE
WHEN TO_CHAR(login.log_in_time, 'HH24:MI:SS') > '12:00:00'
AND TO_CHAR(login.log_in_time, 'HH24:MI:SS') <= '18:00:00'
THEN 'Afternoon'
WHEN TO_CHAR(login.log_in_time, 'HH24:MI:SS') > '18:00:00'
AND TO_CHAR(login.log_in_time, 'HH24:MI:SS') < '6:00:00'
THEN 'Evening'
ELSE 'Morning'
END AS Log_Time,
CASE
WHEN login.log_in_date >= '15-AUG-09'
AND login.log_in_date <= '18-DEC-09'
THEN 'Fall 2009'
WHEN login.log_in_date >= '1-JAN-10'
AND login.log_in_date <= '15-MAY-10'
THEN 'Spring 2010'
END AS Semester
FROM login
)
GROUP BY Log_Time,
Semester;