加入收藏 | 设为首页 | 会员中心 | 我要投稿 东莞站长网 (https://www.0769zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

Oracle SQL – 帮助在Select语句中使用Case

发布时间:2021-04-01 17:02:47 所属栏目:站长百科 来源:网络整理
导读:CREATE TABLE student_totalexp2 nologging compress ASSELECT /*+parallel(a,4)*/ DISTINCT a.member_sk,CASE WHEN b.end_date IS NULL THEN SYSDATE - MIN(TO_DATE(b.start_date,'yyyymm')) ELSE (MAX(TO_DATE(b.end_date,'yyyymm')) - MIN(TO_DATE(b.star

CREATE TABLE student_totalexp2 nologging compress AS
SELECT /*+parallel(a,4)*/ DISTINCT a.member_sk,CASE 
         WHEN b.end_date IS NULL THEN 
           SYSDATE - MIN(TO_DATE(b.start_date,'yyyymm'))
         ELSE 
           (MAX(TO_DATE(b.end_date,'yyyymm')) - MIN(TO_DATE(b.start_date,'yyyymm')))  
       END as days_experience
  FROM student_schools a 
  JOIN rdorwart.position_rd b ON a.member_sk = b.member_sk 
 WHERE days_experience < 730 
 GROUP BY a.member_sk;

SELECT COUNT(*) 
  FROM student_experience;

知道为什么我一直收到这个错误:错误报告:

SQL Error: ORA-00904: “DAYS_EXPERIENCE”: invalid identifier 00904. 00000 – “%s: invalid identifier”
*Cause:
*Action:

解决方法

您不能在WHERE子句中引用别名.要么使用子查询,要么更好地使用整个CASE … END到where子句中.

根据OP的评论更新了查询:

create table student_totalexp2 nologging compress as 
SELECT a.member_sk,SUM(CASE WHEN b.end_date IS NULL
    THEN sysdate 
    ELSE to_date(b.end_date,'yyyymm') 
  END - to_date(b.start_date,'yyyymm')) as days_experience
FROM student_schools a INNER JOIN rdorwart.position_rd b 
  ON a.member_sk = b.member_sk 
GROUP BY a.member_sk
HAVING SUM(
  CASE WHEN b.end_date IS NULL
    THEN sysdate 
    ELSE to_date(b.end_date,'yyyymm')
  ) < 730;
SELECT COUNT(*) FROM student_experience;

(编辑:东莞站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!