반응형
SQL - 전치 방법은?
다음 표와 비슷한 것이 있습니다.
================================================
| 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 |
|--------+-----------+----------+----------------|
FieldName의 값은 사용자 이름, 암호 및 전자 메일 주소로 제한되지 않습니다.이들은 사용자가 정의한 대로 무엇이든 될 수 있습니다.
SQL에서 이것을 할 수 있는 방법이 있습니까?
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의 준비된 문(dynamic SQL) 구문을 사용해야 합니다.
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
언급URL : https://stackoverflow.com/questions/3392956/sql-how-to-transpose
반응형
'programing' 카테고리의 다른 글
| 특정 테이블에 연결된 모든 외부 키 제약 조건 사용 안 함 (0) | 2023.10.07 |
|---|---|
| 대화형 사용자를 통한 Excel COM 자동화는 사용자 로그오프 시 작동 중지 (0) | 2023.10.07 |
| 자바스크립트로 양식 제출 이벤트는 어떻게 들을 수 있나요? (0) | 2023.10.07 |
| WooCommerce에서 적용되는 쿠폰 코드가 있는지 확인합니다. (0) | 2023.10.07 |
| jQuery - 아래로 스크롤할 때 축소되는 sticky 헤더 (0) | 2023.10.07 |