by tosswin [SQL Query] mariadb query 행->열 [2023.10.10 10:58:22]
좀 길기는 하지만 다음과 같이 테이블에 저장되어 있습니다.
mesDate | type(varchar) | content | status |
2023-02-12 | 0 | hp1 | NG |
2023-02-12 | 0 | hp2 | OK |
2023-02-12 | 0 | st1 | OK |
2023-02-12 | 0 | st2 | OK |
2023-02-12 | 1 | e1 | OK |
2023-02-12 | 1 | h1 | OK |
2023-02-12 | 1 | h2 | NG |
2023-02-12 | 1 | h3 | OK |
2023-02-12 | 1 | w1 | OK |
2023-02-12 | 2 | e1 | OK |
2023-02-12 | 2 | h1 | OK |
2023-02-12 | 2 | h2 | OK |
2023-02-12 | 2 | h3 | OK |
2023-02-12 | 2 | w1 | OK |
2023-02-13 | 0 | hp1 | OK |
2023-02-13 | 0 | hp2 | OK |
2023-02-13 | 0 | st1 | OK |
2023-02-13 | 0 | st2 | OK |
2023-02-13 | 1 | e1 | OK |
2023-02-13 | 1 | h1 | OK |
2023-02-13 | 1 | h2 | OK |
2023-02-13 | 1 | h3 | OK |
2023-02-13 | 1 | w1 | OK |
2023-02-13 | 2 | e1 | OK |
2023-02-13 | 2 | h1 | OK |
2023-02-13 | 2 | h2 | OK |
2023-02-13 | 2 | h3 | OK |
2023-02-13 | 2 | w1 | OK |
2023-02-14 | 0 | hp1 | OK |
2023-02-14 | 0 | hp2 | OK |
2023-02-14 | 0 | st1 | OK |
2023-02-14 | 0 | st2 | OK |
2023-02-14 | 1 | e1 | OK |
2023-02-14 | 1 | h1 | OK |
2023-02-14 | 1 | h2 | OK |
2023-02-14 | 1 | h3 | OK |
2023-02-14 | 1 | w1 | OK |
2023-02-14 | 2 | e1 | OK |
2023-02-14 | 2 | h1 | OK |
2023-02-14 | 2 | h2 | OK |
2023-02-14 | 2 | h3 | OK |
2023-02-14 | 2 | w1 | OK |
2023-02-15 | 0 | hp1 | OK |
2023-02-15 | 0 | hp2 | OK |
2023-02-15 | 0 | st1 | NG |
2023-02-15 | 0 | st2 | OK |
2023-02-15 | 1 | e1 | OK |
2023-02-15 | 1 | h1 | OK |
2023-02-15 | 1 | h2 | OK |
2023-02-15 | 1 | h3 | OK |
2023-02-15 | 1 | w1 | OK |
2023-02-15 | 2 | e1 | OK |
2023-02-15 | 2 | h1 | OK |
2023-02-15 | 2 | h2 | OK |
2023-02-15 | 2 | h3 | OK |
2023-02-15 | 2 | w1 | OK |
제가 변경하고 싶은 결과는 다음과 같습니다.
mesDate | 0_hp1 | 0_hp2 | 0_st1 | 0_st2 | 1_e1 | 1_h1 | 1_h2 | 1_h3 | 1_w1 | 2_e1 | 2_h1 | 2_h2 | 2_h3 | 2_w1 |
2023-02-12 | NG | OK | OK | OK | OK | OK | NG | OK | OK | OK | OK | OK | OK | OK |
2023-02-13 | OK | OK | OK | OK | OK | OK | OK | OK | OK | OK | OK | OK | OK | OK |
2023-02-14 | OK | OK | OK | OK | OK | OK | OK | OK | OK | OK | OK | OK | OK | OK |
2023-02-15 | OK | OK | NG | OK | OK | OK | OK | OK | OK | OK | OK | OK | OK | OK |
이렇게 변경하려면 query를 어떻게 작성해야 할까요?
도저희 떠오르지 않아 이렇게 질문드립니다.
감사합니다.
SELECT mesDate , MIN(CASE WHEN type = '0' AND content = 'hp1' THEN status END) "0_hp1" , MIN(CASE WHEN type = '0' AND content = 'hp2' THEN status END) "0_hp2" , MIN(CASE WHEN type = '0' AND content = 'st1' THEN status END) "0_st1" , MIN(CASE WHEN type = '0' AND content = 'st2' THEN status END) "0_st2" , MIN(CASE WHEN type = '1' AND content = 'e1' THEN status END) "1_e1" , MIN(CASE WHEN type = '1' AND content = 'h1' THEN status END) "1_h1" , MIN(CASE WHEN type = '1' AND content = 'h2' THEN status END) "1_h2" , MIN(CASE WHEN type = '1' AND content = 'h3' THEN status END) "1_h3" , MIN(CASE WHEN type = '1' AND content = 'w1' THEN status END) "1_w1" , MIN(CASE WHEN type = '2' AND content = 'e1' THEN status END) "2_e1" , MIN(CASE WHEN type = '2' AND content = 'h1' THEN status END) "2_h1" , MIN(CASE WHEN type = '2' AND content = 'h2' THEN status END) "2_h2" , MIN(CASE WHEN type = '2' AND content = 'h3' THEN status END) "2_h3" , MIN(CASE WHEN type = '2' AND content = 'w1' THEN status END) "2_w1" FROM t GROUP BY mesDate ; SELECT mesDate , MIN(CASE x WHEN '0_hp1' THEN s END) "0_hp1" , MIN(CASE x WHEN '0_hp2' THEN s END) "0_hp2" , MIN(CASE x WHEN '0_st1' THEN s END) "0_st1" , MIN(CASE x WHEN '0_st2' THEN s END) "0_st2" , MIN(CASE x WHEN '1_e1' THEN s END) "1_e1" , MIN(CASE x WHEN '1_h1' THEN s END) "1_h1" , MIN(CASE x WHEN '1_h2' THEN s END) "1_h2" , MIN(CASE x WHEN '1_h3' THEN s END) "1_h3" , MIN(CASE x WHEN '1_w1' THEN s END) "1_w1" , MIN(CASE x WHEN '2_e1' THEN s END) "2_e1" , MIN(CASE x WHEN '2_h1' THEN s END) "2_h1" , MIN(CASE x WHEN '2_h2' THEN s END) "2_h2" , MIN(CASE x WHEN '2_h3' THEN s END) "2_h3" , MIN(CASE x WHEN '2_w1' THEN s END) "2_w1" FROM (SELECT mesDate , CONCAT(type, '_', content) x , status s FROM t ) a GROUP BY mesDate ;