안녕하세요 항상 도움주셔서 정말 감사합니다 ㅠㅠ
회사에 딱히 물어볼사람이없어서 여기가 제 멘토같은 곳이네요 다시 한번더 감사합니다
이미지 파일처럼 쿼리가 나오는데
이쿼리 결과를
REGI_DATE 포유류 조류
2017 2 1
2018 3 4
2019 1 0
이런 형식의 결과를 얻으려면 어떻게 해야할까요?
년도를 하나로 합치고 포유류와 조류를 행에서 컬럼으로 바꾸는건데
검색을해도 되지가 않아서 여쭤봅니다
사용 툴은 TIBERO입니다.
1. 검색조건과 집계조건이 다른데? 이렇게 다른게 맞는건지?
- 검색조건 기간은 tb_diag_relt.regi_date 를 이용하는데.
- 집계년도 조회는 tb_smpl_item.regi_date 를 이용하네요?
2. 기간 검색 조건이 이상합니다.
- Between 조건을 사용하면 시작, 종료 모두 이퀄(=)이 붙는 조건인데
- 종료조건에는 이퀄(=)이 빠져야 맞습니다.
SELECT TO_CHAR(regi_date, 'YYYY') 연도 , COUNT(DECODE(smpl_smplkind, 'SK01', 1)) 포유류 , COUNT(DECODE(smpl_smplkind, 'SK02', 1)) 조류 FROM tb_smpl_item WHERE diag_req_no IN (SELECT diag_relt_no FROM tb_diag_relt WHERE del_yn = 'N' AND regi_date >= TO_DATE('2009-01-01', 'yyyy-mm-dd') AND regi_date < TO_DATE('2019-04-15', 'yyyy-mm-dd') + 1 ) AND smpl_smplkind IN ('SK01', 'SK02') GROUP BY TO_CHAR(regi_date, 'YYYY') ORDER BY 연도 ;
네 다른 검색조건맞습니다
Between 조건도 수정하였습니다.
알려주신 소스코드 돌려보니 오류가 발생해서요
tb_smpl_item.diag_req_no 와 tb_diag_relt.diag_relt_no 이렇게 다른게 맞습니다
그래서 알려주신 쿼리를
SELECT TO_CHAR(regi_date, 'YYYY') 연도 , COUNT(DECODE(smpl_smpkind, 'SK01', 1)) 포유류 , COUNT(DECODE(smpl_smpkind, 'SK02', 1)) 조류 FROM tb_smpl_item WHERE diag_req_no IN (SELECT diag_relt_no FROM tb_diag_relt WHERE del_yn = 'N' AND regi_date >= TO_DATE('2009-01-01', 'yyyy-mm-dd') AND regi_date < TO_DATE('2019-04-15', 'yyyy-mm-dd') + 1 ) AND smpl_smpkind IN ('SK01', 'SK02') GROUP BY TO_CHAR(regi_date, 'YYYY') ORDER BY 연도;
이렇게 수정하였는데
JDBC-8026:Invalid identifier. at line 11, column 11: AND smpl_smpkind IN ('SK01', 'SK02') ^
오류가 발생했습니다 원인은 테이블 필드에 없다고 검색되는데 테이블에 존재하는 필드거든요.. 쿼리가안돌아가는 이유는 뭘까요