제가 SQL을 시작한지 얼마 안되서 쿼리를 작성하는데 많은 어려움을 느끼고 있습니다.
여기저기 찾아보면서 하고있지만 많이 부족해서 도움을 받고자 글을 올립니다.
test 테이블에 jumin1, sex 컬럼이 있습니다.
jumin1 에는 821201 과 같은 형식의 데이터가 입력되어 있고 sex 에는 M, F 두가지의 값이 입력되어 있습니다.
연령 = 2010 - ( '19' + left(jumin1,2))
남자 = M
여자 = F
연령 |
남자 |
여자 |
합계 |
22 |
1 |
|
1 |
23 |
2 |
2 |
4 |
24 |
3 |
2 |
5 |
위와 같은 테이블의 형식으로 연령에 따른 남자, 여자 각각의 카운트 값을 구하고 싶습니다.
도움 부탁드리겠습니다.
Comment 4
-
최일주
2010.08.03 16:46
-
知音
2010.08.03 17:37
with t as (
select 1 idx, '771201' jumin1, 'M' sex from dual union all
select 2 idx, '771201' jumin1, 'M' sex from dual union all
select 3 idx, '821201' jumin1, 'M' sex from dual union all
select 4 idx, '921201' jumin1, 'M' sex from dual union all
select 5 idx, '421201' jumin1, 'M' sex from dual union all
select 6 idx, '421201' jumin1, 'F' sex from dual union all
select 7 idx, '521201' jumin1, 'F' sex from dual union all
select 8 idx, '521201' jumin1, 'F' sex from dual union all
select 9 idx, '721201' jumin1, 'F' sex from dual
)
select 2010 - ( '19'||substr(jumin1,1,2)) age
, sum(case when sex = 'M' then 1 else 0 end) mcnt
, sum(case when sex = 'F' then 1 else 0 end) fcnt
, sum(1) tcnt
from t
group by 2010 - ( '19'||substr(jumin1,1,2))
order by 1 -
최일주
2010.08.04 09:47
굿~ 잘 배웠습니다~
-
댈이
2010.08.03 18:13
두분 정말 감사드립니다.
두분 도움 덕분에 빠르게 해결하였습니다.
다시 한번 감사드립니다.
CREATE TABLE #test
(
idx INT
, jumin1 CHAR(6)
, sex CHAR(1)
)
GO
INSERT #test VALUES(1, '771201', 'M')
INSERT #test VALUES(2, '771201', 'M')
INSERT #test VALUES(3, '821201', 'M')
INSERT #test VALUES(4, '921201', 'M')
INSERT #test VALUES(5, '421201', 'M')
INSERT #test VALUES(6, '421201', 'F')
INSERT #test VALUES(7, '521201', 'F')
INSERT #test VALUES(8, '521201', 'F')
INSERT #test VALUES(9, '721201', 'F')
DECLARE @year AS SMALLINT
SET @year = YEAR(GETDATE()) - 1899
SELECT @year - born_year AS 연령
, CASE WHEN sex = 'M' THEN count_num ELSE 0 END AS 남자
, CASE WHEN sex = 'F' THEN count_num ELSE 0 END AS 여자
FROM (
SELECT LEFT(jumin1, 2) AS born_year, sex, COUNT(*) AS count_num
FROM #test
GROUP BY LEFT(jumin1, 2), sex
) SUB
ORDER BY @year - born_year
SqlServer가 2000이시니 위와 같이 하시면 될 것 같습니다.
이건 비교적 간단해서 제가 작성했습니다만 다음에는 문의 올리실 때 데이터를 스크립트로
만들어서 문의하시면 더욱 신속 정확한 답을 얻으실 수 있을꺼에요.