데이터베이스 개발자 질문과 답변 게시판
데이터베이스 개발/운영 관련 질문과 답변을 올리는 게시판입니다. 궁금하신 내용을 이곳에서 문의하시면 SQLER 분들의 답변을 받으실 수 있습니다. 문의를 하실때에는 최근 작업하신 특이 사항이나, 장애 발생 전 상황을 상세히 올려 주시면 답글을 적어주시는 SQLER분들의 답변이 더 정확할 수 있으니 도움 되시길 바랍니다. 쿼리 문의일 경우, 실제 문제가 재현되는 테이블생성, 샘플데이터 생성 쿼리를 함께 올려 주시면 더 빠르고 정확한 쿼리 문의 응답이 가능합니다.
select a.작업자코드, a.작업자, a.작업반,
case when c.구분= 'Y' then c.구분 else 'N' end 구분
from a
left outer join b on a.작업장 = b.작업장
left outer join (select a.작업자코드, a.작업자 , 'Y' as 구분 //현재 작업중인 작업자 조회 구분 쿼리
from a left join b on a.작업자코드 = b.작업자코드
where a.지시번호 = ::지시번호
and a.지시순서= ::지시순서
and a.작업번호 = (select max(작업번호) from z where 지시번호 = ::지시번호 and 지시순서= ::지시순서)) c on c.작업자코드= a.작업자코드
where 1 = 1
and a.작업반 like :작업반
and b.작업장like :작업장
이렇게 쿼리를 작성했습니다.
전체 쿼리는 해당 작업반, 작업장에 있는 작업자들을 구하는 쿼리이고
서브쿼리는 작업중인 작업자들을 구하는 쿼리입니다.
작성하려고 하는 쿼리는
작업반,작업장에 있는 전체 작업자들중에
작업중인 작업자들은 비트값 Y를 줘서 구분을하려고합니다.
문제점은 작업중인 사람들중 , 작업반이 다른사람들도 있어서
현재 작성한 쿼리로 실행을하면 원하는결과가 나오지 않습니다.
지금 작업자 코드가 PK로 되어있는데
PK가 중복인경우 비트값을 주는방식으로 다시 쿼리를 작성해보려고하는데,
어떻게 작성하는게 좋을지 조언조 부탁드립니다.