亲爱的程序员, 我需要在单个选择查询中将一个列值与另一个列进行比较。
我的查询是这样的:
SELECT ATTNLOG.emp_id,
ATTNLOG.tdate,
ATTNLOG.tdate_out,
(CASE WHEN EXISTS (SELECT *
FROM tbl_emp_overtime
WHERE emp_id=ATTNLOG.emp_id
AND ot_indate=ATTNLOG.tdate)
THEN 0
ELSE 1
END) as 'STATUS'
FROM tbl_emp_attn_log ATTNLOG
WHERE ATTNLOG.emp_id=201
在我的情况下,我需要比较ATTNLOG的每一行并分别给出STATUS。
实际上结果会返回像
这样的行值EMP_ID TDATE TDATE_OUT STATUS
201 2012-2-26 2012-2-26 0
201 2012-2-27 2012-2-27 1
并且表tbl_emp_overtime的值类似于
emp_ID ot_indate
201 2012-2-27
但是我的代码就像
一样EMP_ID TDATE TDATE_OUT STATUS
201 2012-2-26 2012-2-26 1
201 2012-2-27 2012-2-27 1
但它没有给出那样的结果。请帮帮我。
答案 0 :(得分:1)
尝试使用COUNT(*):
SELECT ATTNLOG.emp_id,
ATTNLOG.tdate,
ATTNLOG.tdate_out,
(CASE WHEN (SELECT count(*)
FROM tbl_emp_overtime
WHERE emp_id=ATTNLOG.emp_id
AND trunc(ot_indate)=(ATTNLOG.tdate)) > 0 THEN 0
ELSE 1
END) as 'STATUS'
FROM tbl_emp_attn_log ATTNLOG
WHERE ATTNLOG.emp_id=201
答案 1 :(得分:1)
如果使用sql 2008将日期转换为date
数据类型,如果原始数据类型为datetime
则应该有帮助:
SELECT *
FROM tbl_emp_overtime
WHERE emp_id=ATTNLOG.emp_id
AND CAST(ot_indate as DATE)=CAST(ATTNLOG.tdate AS DATE)
答案 2 :(得分:0)
尝试GREATEST
或LEAST
作为您的要求