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 |
+-----------+--------------------------------------------------------+
答
看看这个:
MySQL pivot row into dynamic number of columns
这:
http://www.boynux.com/creating-pivot-reports-in-mysql/
MySQL不具有旋转功能仍据我可以告诉。
如果您在使用这些方法时需要任何帮助,请留下评论,我可以在有空的时候添加一个示例。
+0
我已经检查过这些页面。我的情况有点复杂。列数是动态的。也是新列的命名。我知道我需要使用动态数据透视表。我只是不知道该怎么做。我会很感激如果你可以写下一个查询。谢谢回复。 – Asad
你真的必须在MySQL中这样做吗?用PHP或Python这样的客户端编程语言将会非常容易。 – Barmar
*期望您[尝试首先解决您自己的问题](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
您应该能够在有关动态枢轴的其他问题中调整存储过程。而不是使用表中的值作为列名,取得最大的COUNT(*)',然后编写一个循环,通过'Worker' –
Barmar