MySQL 쿼리 질문입니다. (세로를 가로로 붙이기) 0 2 3,581

by 진짜강동원 [MySQL] [2015.01.14 11:07:20]


<기본 테이터>

학교명          과목A          과목B          과목C          과목D

xxx고교        105.1           104.5          100.8            104.8

ㅇㅇ여고      101.3           102.5          109.1            103.3

yyy고교        121.2           119.3          103.1            114.5

zzz여고        104.2           100.1          103.8            113.2

------------------------ 이 하 생 략  ---------------------------

이런 데이터가 있는데 이걸.....

 

학교명          과목A         학교명           과목B          학교명          과목C          학교명          과목D

yyy고교         121.2         yyy고교         119.3         ㅇㅇ여고        109.1           yyy고교        114.5

xxx고교         105.1        xxx고교          104.5           zzz여고        103.8           zzz여고        113.2

이런 식으로 과목별 학교 순위를 매기려고 하는데....

SELECT edu_b AS 'sch_name',
       edu_av AS '과목A'
  FROM tblstscore
 WHERE 1 = 1
UNION ALL
SELECT edu_b AS 'sch_name',
       edu_aw AS '과목B'
  FROM tblstscore
 WHERE 1 = 1
UNION ALL   
SELECT edu_b AS 'sch_name',
       edu_ax AS '과목C'
  FROM tblstscore
 WHERE 1 = 1

이렇게 UNION 으로 붙이긴 했는데.. 옆으로 보내는 방법을 모르겠습니다..;;

 

고수님들 도와주세요~

by 마농 [2015.01.14 13:03:03]
SELECT rn
     , MIN(CASE lv WHEN 1 THEN edu_b  END) 학교A
     , MIN(CASE lv WHEN 1 THEN edu_av END) 과목A
     , MIN(CASE lv WHEN 2 THEN edu_b  END) 학교B
     , MIN(CASE lv WHEN 2 THEN edu_aw END) 과목B
     , MIN(CASE lv WHEN 3 THEN edu_b  END) 학교C
     , MIN(CASE lv WHEN 3 THEN edu_ax END) 과목C
     , MIN(CASE lv WHEN 4 THEN edu_b  END) 학교D
     , MIN(CASE lv WHEN 4 THEN edu_ay END) 과목D
  FROM (SELECT edu_b
             , edu_av
             , edu_aw
             , edu_ax
             , edu_ay
             , @rn := CASE @lv WHEN lv THEN @rn + 1 ELSE 1 END AS rn
             , @lv := lv lv
          FROM (SELECT *
                  FROM tblstscore a
                     , (SELECT 1 lv
                        UNION ALL SELECT 2
                        UNION ALL SELECT 3
                        UNION ALL SELECT 4
                        ) b
                     , (SELECT @rn := 0
                             , @lv := 0
                        ) c
                 ORDER BY lv
                     , CASE lv WHEN 1 THEN edu_av
                               WHEN 2 THEN edu_aw
                               WHEN 3 THEN edu_ax
                               WHEN 4 THEN edu_ay
                        END DESC
                ) a
        ) a
 GROUP BY rn
;

 


by 진짜강동원 [2015.01.14 13:22:39]

헐... 정말정말 감사합니다...ㅜㅜ

간단히 생각했는데.. 절대 간단하지 않네요...;;

 

 

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