2011-12-24 3 views
2

가이드가 가능한 경우 솔루션입니다. 나는 과정 또는 일반 쿼리하여이 작업을하여 구현하기 위해 어디서부터 시작 모른다MySql 테이블 값을 기준으로 정렬 된 문자열

RAJ1 RAJ2 ARUN MUTHU 
----------------------- 
86  74 45 null 
74  86 45 null 
null 74 45 86 

다음과 같이

enter image description here

나는 테이블 결과가 필요합니다.

+1

각 열을 하나의 긴 목록으로 묶고, 이름, 값을 2 열로 나눈 다음 이름을 피벗합니다. 문자열 조작으로 인해 성능이 느려지 겠지만 비정규 화 된 데이터가있을 때 이러한 현상이 발생합니다. – xQbert

답변

1
SELECT 
    COALESCE(
    IF(LEFT(subj1,4)='RAJ1', SUBSTRING(subj1,6), NULL), 
    IF(LEFT(subj2,4)='RAJ1', SUBSTRING(subj2,6), NULL), 
    IF(LEFT(subj3,4)='RAJ1', SUBSTRING(subj3,6), NULL)) as RAJ1, 
    COALESCE(
    IF(LEFT(subj1,4)='RAJ2', SUBSTRING(subj1,6), NULL), 
    IF(LEFT(subj2,4)='RAJ2', SUBSTRING(subj2,6), NULL), 
    IF(LEFT(subj3,4)='RAJ2', SUBSTRING(subj3,6), NULL)) as RAJ2, 
    COALESCE(
    IF(LEFT(subj1,4)='ARUN', SUBSTRING(subj1,6), NULL), 
    IF(LEFT(subj2,4)='ARUN', SUBSTRING(subj2,6), NULL), 
    IF(LEFT(subj3,4)='ARUN', SUBSTRING(subj3,6), NULL)) as ARUN, 
    COALESCE(
    IF(LEFT(subj1,5)='MUTHU', SUBSTRING(subj1,7), NULL), 
    IF(LEFT(subj2,5)='MUTHU', SUBSTRING(subj2,7), NULL), 
    IF(LEFT(subj3,5)='MUTHU', SUBSTRING(subj3,7), NULL)) as MUTHU 
FROM thetable; 
관련 문제