번호 이름 나이 지역
1 가 10대 서울
2 나 20대 경기
3 다 30대 서울
4 가 10대 경기
5 나 20대 서울
db테이블 위에 처럼있습니다
서울,경기 지역에 동명인 가,나 한사람씩 있고, 서울지역에 다라는 사람이 있어서 총 5명이 있습니다
그런데 테이블이 밑에처럼 번호,이름,나이,지역 이런식으로 되어있습니다
어떻게 가져와야지 밑에처럼 데이터를 넣을 수 있나요??
그리고 asp에서 mysql사용하고 있습니다
번호 이름 나이 지역
1 가 10대 서울 경기
2 나 20대 서울 경기
3 다 30대 서울
/* 답에만 맞추었습니다 */ WITH T AS ( SELECT 1 NO , '가' NM , '10대' YR , '서울' LOC FROM DUAL UNION ALL SELECT 2 , '나' , '20대' , '경기' FROM DUAL UNION ALL SELECT 3 , '다' , '30대' , '서울' FROM DUAL UNION ALL SELECT 4 , '가' , '10대' , '경기' FROM DUAL UNION ALL SELECT 5 , '나' , '20대' , '서울' FROM DUAL ) SELECT MIN(NO)AS NO , NM , YR , LISTAGG(LOC,' ') WITHIN GROUP(ORDER BY LOC DESC) LOC FROM T GROUP BY NM , YR
제가 왕초보라서 그런데..
번호가 db 필드에서 no이고
이름 NM
나이 YR
지역LOC
테이블명이 DUAL
맞나요?
제가 확인할려고 하는데 오류가 나오네요..
그리고 asp에서 mysql사용하고 있습니다
Error Code : 1064
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'T AS (
SELECT 1 aa , '가' bb , '10대' cc , '서울' dd FROM ab UNION ALL
SELEC' at line 1
SELECT @no := @no + 1 AS no , nm , yr , MIN(CASE loc WHEN '서울' THEN loc END) 서울 , MIN(CASE loc WHEN '경기' THEN loc END) 경기 , MIN(CASE loc WHEN '강원' THEN loc END) 강원 FROM (SELECT 1 no, '가' nm, '10대' yr, '서울' loc FROM dual UNION ALL SELECT 2, '나', '20대', '경기' FROM dual UNION ALL SELECT 3, '다', '30대', '서울' FROM dual UNION ALL SELECT 4, '가', '10대', '경기' FROM dual UNION ALL SELECT 5, '나', '20대', '서울' FROM dual ) t , (SELECT @no := 0) x GROUP BY nm, yr ;
-- 컬럼명으로 이미 표시한 값을 다시 보여주는 것은 의미 없을 듯 하네요 -- COUNT 로 인원수를 보여준다면 더욱 의미있는 자료가 되겠네요. SELECT @no := @no + 1 AS no , nm , yr , COUNT(CASE loc WHEN '서울' THEN 1 END) 서울 , COUNT(CASE loc WHEN '경기' THEN 1 END) 경기 , COUNT(CASE loc WHEN '강원' THEN 1 END) 강원 FROM (SELECT 1 no, '가' nm, '10대' yr, '서울' loc FROM dual UNION ALL SELECT 2, '나', '20대', '경기' FROM dual UNION ALL SELECT 3, '다', '30대', '서울' FROM dual UNION ALL SELECT 4, '가', '10대', '경기' FROM dual UNION ALL SELECT 5, '나', '20대', '서울' FROM dual ) t , (SELECT @no := 0) x GROUP BY nm, yr ;
동적 검색해서 해봤는데.. 서울우선 검색이 되는지 확인해 봤는데 안되네요..
서울 되면 하나씩 늘려나갈려고 했는데..
SET @ee="where loc = '서울'";
SELECT
@
no
:= @
no
+ 1
AS
no
, nm
, yr
,
COUNT
(
CASE
loc WHEN
@ee THEN
1
END
) 서울
,
COUNT
(
CASE
loc WHEN
@ee THEN
1
END
) 경기
,
COUNT
(
CASE
loc WHEN
@ee THEN
1
END
) 강원
FROM
(
SELECT
1
no
,
'가'
nm,
'10대'
yr,
'서울'
loc
FROM
dual
UNION
ALL
SELECT
2,
'나'
,
'20대'
,
'경기'
FROM
dual
UNION
ALL
SELECT
3,
'다'
,
'30대'
,
'서울'
FROM
dual
UNION
ALL
SELECT
4,
'가'
,
'10대'
,
'경기'
FROM
dual
UNION
ALL
SELECT
5,
'나'
,
'20대'
,
'서울'
FROM
dual
) t
, (
SELECT
@
no
:= 0) x
GROUP
BY
nm, yr
;