같은나이 묶고 지역 같이 보여주기 0 3 1,423

by db초보 [MySQL] mysql [2015.11.23 20:26:47]


aa bb cc dd
1 10 서울
2 10 경기
3 15 서울
4 20 서울
5 20 경기
6 30 서울
7 35 서울
8 30 경기
9 35 경기

위에처럼 데이터베이스에 저장이 되어있고 밑에처럼 테이블 출력하고 싶은데 안되네요..

어떻게 해야되나요??

설명을 하자면 '가'라는 동명인이 3명의 나이가 10,10,15살입니다.그런데 서울,경기,서울에 살아서 밑에처럼

나이가 똑같은 10살은 같이 묶어서 한줄에 서울,경기에 산다고 표시가 되어있고 15살은 따로 서울이라고 밑에 썼습니다

aa bb cc dd  
1 10 서울 경기
2 15 서울  
3 20 서울 경기
4 30 서울 경기
5 35 서울 경기

 

by 우리집아찌 [2015.11.24 08:45:39]
/*  오라클로 짰습니다.
     DD가 가변적이면 다이나믹 쿼리로 하셔야합니다
     DD집합이 고정적이면 다음과 같이 하셔도 됩니다.
*/
WITH T AS (
SELECT  1 AA, '가' BB, 10 CC, '서울' DD FROM DUAL UNION ALL 
SELECT  2 , '가' , 10 , '경기' FROM DUAL UNION ALL 
SELECT  3 , '가' , 15 , '서울' FROM DUAL UNION ALL 
SELECT  4 , '나' , 20 , '서울' FROM DUAL UNION ALL 
SELECT  5 , '나' , 20 , '경기' FROM DUAL UNION ALL 
SELECT  6 , '다' , 30 , '서울' FROM DUAL UNION ALL 
SELECT  7 , '다' , 35 , '서울' FROM DUAL UNION ALL 
SELECT  8 , '다' , 30 , '경기' FROM DUAL UNION ALL 
SELECT  9 , '다' , 35 , '경기' FROM DUAL 
)

SELECT ROWNUM , A.* 
  FROM
(
SELECT BB , CC , MAX(DECODE(DD,'서울','서울')) LCL1, MAX(DECODE(DD,'경기','경기')) LCL2 FROM T
GROUP BY BB , CC
ORDER BY BB , CC
) A

 


by db초보 [2015.11.24 09:29:52]

mysql에서는 DECODE다른 역활을 다르다고 case문 쓰라고 해서 썼는데..안됩니다..

WITH T AS (
SELECT  1 AA, '가' BB, 10 CC, '서울' DD FROM DUAL UNION ALL
SELECT  2 , '가' , 10 , '경기' FROM DUAL UNION ALL
SELECT  3 , '가' , 15 , '서울' FROM DUAL UNION ALL
SELECT  4 , '나' , 20 , '서울' FROM DUAL UNION ALL
SELECT  5 , '나' , 20 , '경기' FROM DUAL UNION ALL
SELECT  6 , '다' , 30 , '서울' FROM DUAL UNION ALL
SELECT  7 , '다' , 35 , '서울' FROM DUAL UNION ALL
SELECT  8 , '다' , 30 , '경기' FROM DUAL UNION ALL
SELECT  9 , '다' , 35 , '경기' FROM DUAL
)
 
SELECT ROWNUM , A.*
  FROM
(
SELECT BB , CC ,
, MAX(CASE dd WHEN '서울' THEN dd END) 서울
, MAX(CASE dd WHEN '경기' THEN dd END) 경기

FROM T
GROUP BY BB , CC
ORDER BY BB , CC
) A


by 마농 [2015.11.24 10:31:39]

Case 써서 안된게 아니겠죠.

Rownum 써서 안된거죠. Rownum 빼고 해보세요.

With 구문도 안됩니다.

그리고 똑같은 질문을 또 올리셨네요.

http://www.gurubee.net/article/66188

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입