2016-06-09 6 views
0

다음 데이터를 연령별로 분류해야합니다 : 1-6,6-12,12-18,> 18.Oracle SQL : 연령 계산 관련 문제

내가 가진 문제는 나이가 6으로 계산 될 때 기록이 카테고리에 나타나지 않는 것입니다. 나는 그것이 내 논리 당 6-12에 있어야한다고 기대한다. 1-6: age<=5 6-12: age >=6 <=11 12-18:age >=12 <=17 >18:age >=18

가 왜 6 세를 기록 말이냐 : 중복을 방지하기 위해

, 나는 나의 쿼리를 작성했습니다? 편집

:> 12 < 18 만 같이 (date1-DOB)/365.25 >= 6 (date1-DOB)/ 365.25 <= 11

나는 또한 < 6으로 1-6을 시도, 6-12로> 6 < 12 및 12 ~ 18 : 여기 내 나이 계산이다 어떤 경우에는 6 세에서 6 세 사이에 6 세가 나타납니다. 12-12, 12-18. 이것을 피할 수있는 방법이 있습니까?

+2

코드를 게시 할 수 있습니까? – Dere0405

+3

전체 검색어를 게시하십시오. 또한, 이것이 pl/sql이 아닌 경우 태그로 지정하면 안됩니다. – Lexi

+0

(반올림 문제가 있습니까?) 논리가 5.99로 계산 된 경우 <=5 or > = 6입니까? 당신이 "나이"를 어떻게 얻는 지 알지 못하고 도당들이 문제인지 나는 모른다. – xQbert

답변

0

당신은 ..not 항상 예를 ​​들어,이 범위에서 범위를 커버했다 : 당신이 expicitly 각 범위에 맞게 조건을 쓸 수있는

1-6: age <6   not <=5 and 
6-12: age >=6 <=12 not age >=6 <=11 
12-18:age >=12 <=18 not >=12 <=17 
>18:age >=18 
+0

그러나 내가 그렇게 할 때, 6 세의 기록은 1-6과 6-12 모두에서 계산됩니다. 어떻게 이것을 피할 수 있습니까? – Skn

+0

정확한 코드를 질문하고 보여줍니다. 왜냐하면 .. 6 세가 제 제안으로 두 번 계산된다는 사실이 이상합니다 .... – scaisEdge

1

당신은 CASE을 사용할 수 있습니다; 예를 들면 다음과 같습니다.

select x, 
     case 
     when x >= 1 and x < 6 then '1-6' 
     when x >= 6 and x < 12 then '6-12' 
     when x >= 12 and x < 18 then '12-18' 
     when x >= 18   then '>18' 
     else 'not matched' 
     end as range 
from (select level/2 as x from dual connect by level < 20) 

다른 방법으로도 똑같은 작업을 수행 할 수 있지만 가장 읽기 쉽습니다.