[SQL] SQL - 어떻게 트랜스 하는가?
SQLSQL - 어떻게 트랜스 하는가?
나는 다음 표와 비슷한 뭔가를 :
================================================
| Id | UserId | FieldName | FieldValue |
=====+========+===============+================|
| 1 | 100 | Username | John Doe |
|----+--------+---------------+----------------|
| 2 | 100 | Password | pass123! |
|----+--------+---------------+----------------|
| 3 | 102 | Username | Jane |
|----+--------+---------------+----------------|
| 4 | 102 | Password | $ecret |
|----+--------+---------------+----------------|
| 5 | 102 | Email Address | jane@email.com |
------------------------------------------------
나는 나에게이 같은 결과를 줄 것이다 쿼리를해야합니다 :
==================================================
| UserId | Username | Password | Email Address |
=========+===========+===========================|
| 100 | John Doe | pass123! | |
|--------+-----------+----------+----------------|
| 102 | Jane | $ecret | jane@email.com |
|--------+-----------+----------+----------------|
필드 이름의 값은 사용자 이름, 암호 및 이메일 주소에 국한되지 않습니다. 그들은 사용자가 정의하는대로 그들은 아무것도 할 수있다.
SQL이 할 수있는 방법이 있나요?
해결법
-
==============================
1.그 휴가를 사용할 수 있도록 MySQL은, ANSI PIVOT / UNPIVOT 구문을 지원하지 않습니다
그 휴가를 사용할 수 있도록 MySQL은, ANSI PIVOT / UNPIVOT 구문을 지원하지 않습니다
SELECT t.userid MAX(CASE WHEN t.fieldname = 'Username' THEN t.fieldvalue ELSE NULL END) AS Username, MAX(CASE WHEN t.fieldname = 'Password' THEN t.fieldvalue ELSE NULL END) AS Password, MAX(CASE WHEN t.fieldname = 'Email Address' THEN t.fieldvalue ELSE NULL END) AS Email FROM TABLE t GROUP BY t.userid
당신이 볼 수 있듯이, CASE 문은 값에 따라 정의 될 필요가있다. 이 역동적하려면, 당신은 MySQL을의 준비된 명령문 (동적 SQL) 구문을 사용해야 할 것입니다.
-
==============================
2.당신은 GROUP_CONCAT를 사용할 수 있습니다
당신은 GROUP_CONCAT를 사용할 수 있습니다
(안된)
SELECT UserId, GROUP_CONCAT( if( fieldname = 'Username', fieldvalue, NULL ) ) AS 'Username', GROUP_CONCAT( if( fieldname = 'Password', fieldvalue, NULL ) ) AS 'Password', GROUP_CONCAT( if( fieldname = 'Email Address', fieldvalue, NULL ) ) AS 'Email Address', FROM table GROUP BY UserId
from https://stackoverflow.com/questions/3392956/sql-how-to-transpose by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 PostgreSQL의 트리거에서 이메일을 보낼 수 있습니까? (0) | 2020.04.15 |
---|---|
[SQL] 시간 중복에 대한 테이블을 확인? (0) | 2020.04.15 |
[SQL] (*) 또는 카운트 더 나은 MYSQL 수있는 무엇입니까 (1)? (0) | 2020.04.15 |
[SQL] null 값과 MySQL의 비교 (0) | 2020.04.15 |
[SQL] MySQL의 : LIKE의 역 버전은 무엇입니까? (0) | 2020.04.15 |