MySQL的 - 使用GROUP BY(透视表)

问题描述:

行到列(动态)我有以下表“draftWorker”MySQL的 - 使用GROUP BY(透视表)

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或Python这样的客户端编程语言将会非常容易。 – Barmar

+0

*期望您[尝试首先解决您自己的问题](http://meta.*.com/questions/261592),并且我们也[不回答作业问题](https://softwareengineering.meta。 stackexchange.com/questions/6166)。请更新您的问题,以显示您已经在[最小,完整和可验证的示例]中尝试过的内容(http://*.com/help/mcve)。有关更多信息,请参阅[如何提出良好问题](http://*.com/help/how-to-ask),并参加[网站之旅](http://*.com/tour ):) – Barmar

+0

您应该能够在有关动态枢轴的其他问题中调整存储过程。而不是使用表中的值作为列名,取得最大的COUNT(*)',然后编写一个循环,通过'Worker ' – Barmar

看看这个:

MySQL pivot row into dynamic number of columns

这:

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

MySQL不具有旋转功能仍据我可以告诉。

如果您在使用这些方法时需要任何帮助,请留下评论,我可以在有空的时候添加一个示例。

+0

我已经检查过这些页面。我的情况有点复杂。列数是动态的。也是新列的命名。我知道我需要使用动态数据透视表。我只是不知道该怎么做。我会很感激如果你可以写下一个查询。谢谢回复。 – Asad