2015-01-15 2 views
0

나는 학생의 "이름"과 "DOB"가있는 "학생"테이블을 가지고 있습니다.생년월일부터 나이별로 SQL 그룹 학생들

나는 다음과 같은 그룹으로 그룹의 학생들에게하고 싶은 :

을 수행합니다. 10-12
b. 13-14
c. 15-16 d. > = 17

이렇게 표시됩니다.

a. 폴, 피터 메리
b. 존, 윌리엄

어떻게해야합니까?

select case 
      when age between 10 and 12 then a 
      when age between 13 and 14 then b 
      when age between 15 and 16 then c 
      when age >= 17 then d 

    from (
      SELECT ROUND(DATEDIFF(Cast(CURRENT_TIMESTAMP() as Date), 
         Cast(birthday as Date))/365, 0) as age 
      FROM db.student 

을하지만 주위에 내 머리를 얻이 수없는 것 :

지금까지 내가 가지고있다.

Management Studio를 사용하고 있습니다.

미리 감사드립니다.

+1

무엇이 작동하지 않습니까? 오류가 있습니까? 또한, 어떤 DBMS? –

+0

Management Studio를 사용하고 있습니다. – CompilerSaysNo

+0

그러면 DBMS는 SQL Server가 될 것입니까? 그에 따라 태그 할 수 있습니까? –

답변

2

다음 쿼리를 사용하면 원하는 결과를 얻을 수 있습니다. 먼저 연령이 결정됩니다. (날짜 형식 - 일 - DATEDIFF 함수에 추가했습니다). 그런 다음 연령 카테고리가 결정됩니다.

WITH ages AS 
(
SELECT 
    name, 
    ROUND(DATEDIFF(day, Cast(CURRENT_TIMESTAMP() as Date), Cast(birthday as Date))/365, 0) as age 
FROM db.student 
) 
SELECT 
    name, 
    case 
        when age between 10 and 12 then a 
        when age between 13 and 14 then b 
        when age between 15 and 16 then c 
        when age >= 17 then d 
    end as age_category 
FROM ages 
ORDER BY name;