2017-11-10 4 views
0

에 의해 그룹을 사용하여 열을 행 (동적) 나는 'draftWorker'MySQL의 - (피벗 테이블)

select * from draftWorker; 

+--------+----------+ 
| draftID| WorkerID | 
+--------+----------+ 
|  7 | 8280  |  
|  7 | 7794  |  
|  7 | 4633  |  
| 587 | 8280  | 
| 587 | 4633  | 
+--------+----------+ 

다음 쿼리는 나에게 다음과 같은 결과를주고 다음 표를 가지고있다.

SELECT draftID, GROUP_CONCAT(DISTINCT CONCAT(WorkerID)) AS Workers FROM 
draftWorker 
GROUP BY draftID; 

+-----------+----------------+ 
| draftID | Workers  | 
+-----------+----------------+ 
|  7 | 8280,7794,4633 |  
|  587 | 8280,4633  | 
+-----------+----------------+ 

하지만 실제로이

+-----------+---------+---------+---------+ 
| draftID | Worker1 | Worker2 | Worker3 | 
+-----------+---------+---------+---------+ 
|  7 | 8280 | 7794 | 4633 | 
|  587 | 8280 | 4633 |   | 
+-----------+---------+-------------------+ 

어떤 생각을해야합니까?

[편집]

다음 SQL을 시도해보십시오. 아직 멀었 어.

SELECT draftID, Workers From (
SELECT @position := 0, draftID, 
GROUP_CONCAT(DISTINCT CONCAT(WorkerID, ' As WorkerID', (@position := 
@position + 1))) As Workers 
FROM draftWorker 
GROUP BY draftID) AS C; 

+-----------+--------------------------------------------------------+ 
| draftID | Workers            | 
+-----------+--------------------------------------------------------+ 
|  7 | 8280 As WorkerID1,7794 As WorkerID2,4633 As WorkerID3 |  
|  587 | 8280 As WorkerID1,4633 As WorkerID2     | 
+-----------+--------------------------------------------------------+ 
+0

정말 MySQL에서 이것을해야합니까? PHP 나 파이썬 같은 클라이언트 프로그래밍 언어에서는 무한히 쉬울 것입니다. – Barmar

+0

StackOverflow는 [자신의 문제를 먼저 해결하려고합니다.] (http://meta.stackoverflow.com/questions/261592), [숙제에 대한 답변을 제공하지 않습니다] (https : //softwareengineering.meta. stackexchange.com/questions/6166). 질문을 업데이트하여 [최소, 완전하며 검증 가능한 예] (http://stackoverflow.com/help/mcve)에서 이미 시도한 것을 보여주십시오. 자세한 내용은 [좋은 질문을하는 방법] (http://stackoverflow.com/help/how-to-ask)을 참조하고 [사이트 둘러보기] (http://stackoverflow.com/tour)를 참조하십시오.) :) – Barmar

+0

동적 피벗에 대한 다른 질문에서 저장 프로 시저를 적용 할 수 있어야합니다. 테이블의 값을 열 이름으로 사용하는 대신'COUNT (*)'의 최대 값을 얻은 다음'Worker 1'과 같은'Worker 1'과 같은 열 이름을'Worker ' – Barmar

답변

0

체크 아웃이 :

MySQL pivot row into dynamic number of columns

그리고이 :

http://www.boynux.com/creating-pivot-reports-in-mysql/

MySQL은 아직까지 내가 말할 수있는 피벗 기능이 없습니다.

데이터에 이러한 방법을 사용하는 데 도움이 필요하면 의견을 남기고 시간이 있으면 예제를 추가 할 수 있습니다.

+0

이미 해당 페이지를 확인했습니다. 내 시나리오는 약간 복잡합니다. 열의 수는 동적입니다. 새 열의 이름 지정. 동적 피벗 테이블을 사용해야한다는 것을 알고 있습니다. 나는 그것을 정확하게하는 방법을 모른다. 질의를 적어두면 정말 감사하겠습니다. 답장을 보내 주셔서 감사합니다. – Asad