2017-01-20 2 views
0

내 응용 프로그램의 데이터는 현재 일련의 열로 제공되지만 두 열, 결과 및 작업 만 존재하도록하고 싶습니다. 현재 데이터가 어떻게 제공되는지에 대한 첨부 된 "스프레드 시트"스크린 샷과 달성하고자하는 것에 대한 "데이터베이스"스크린 샷을 참조하십시오.MYSQL - 피벗 데이터

현재 약 100 개의 UNION ALL 문으로이 작업을 수행 할 수 있지만 쿼리가 너무 느려집니다. 이렇게 많은 유니온 ALL없이 이것을 달성하는 더 좋은 방법이 있을까요?

Spreadsheet 데이터베이스 :

Database

감사합니다!

답변

1

UNION ALL은 좋은 방법이지만 각 하위 쿼리에 대해 한 번씩 테이블을 검색해야합니다.

하나의 대안으로 cross join을 사용합니다. 이를 위해서는 더 많은 코딩이 필요하지만 일을 가속화 할 수 있습니다.

select tt.task, 
     (case when tt.task = 'Use Proper PPE' then use_proper_ppe 
      when tt.task = 'Damage Prevention' then damage_prevention 
      . . . 
     end) as result 
from t cross join 
    (select 'Use Proper PPE' as task union all 
     select 'Damage Prevention' union all 
     . . . 
    ) tt; 
+0

고마워요! 나는 이것을 시도 할 것이다. 나는 약 14 개의 테이블로부터 데이터를 십자가에 합치는데이를 반영하기 위해 어떻게 코드를 재구성해야합니까? – JMB1656

+0

@ JMB1656. . . 귀하의 질문에만 하나의 테이블을 언급. 복잡한 쿼리를 사용하는 경우't'가있는 하위 쿼리를 사용할 수 있습니다. –