我在MySQL中有一个表格,其格式如下
ID Team Task
-----------------
1 Team01 Task_01
2 Team02 Task_02
3 Team02 Task_01
“团队和任务”列中的值是重复的。
我需要从表中收集不同的任务并使用它来创建一个新表,其模式的格式为 表(Task_01 varchar(20),Task_02 varchar(20)); < / strike>
表(Team varchar(15)PRIMARY KEY,Task_01 int,Task_02 int)
创建之后,我需要按照各个团队执行的任务的频率填充这个新表。
需要一些指示才能继续。感谢。
[编辑]
预期输出是另一个表,如下所示
Team | Task_01 | Task_02
Team01 | 1 | 0
Team02 | 1 | 1
从给定的表中获取所有不同的任务后,只需要有关如何创建模式的帮助/想法(仅通过 SQL脚本)。
答案 0 :(得分:1)
鉴于此样本数据:
CREATE TABLE Table1
(`ID` int, `Team` varchar(6), `Task` varchar(7))
;
INSERT INTO Table1
(`ID`, `Team`, `Task`)
VALUES
(1, 'Team01', 'Task_01'),
(2, 'Team02', 'Task_02'),
(3, 'Team02', 'Task_01')
;
你通常会这样做
SELECT
Team, Task, COUNT(*)
FROM Table1
GROUP BY Team, Task;
获得此结果
| TEAM | TASK | COUNT(*) |
|--------|---------|----------|
| Team01 | Task_01 | 1 |
| Team02 | Task_01 | 1 |
| Team02 | Task_02 | 1 |
不是所需的格式,但通常格式化在应用程序层中完成。所以这就是我推荐的。它既简单又高效,并且没有任何缺点,比如当你想要添加另一个任务时你会做什么?您将添加另一列。当团队与此任务无关时,此列中的值为NULL。这是不好的。无论如何...如果你绝对想要在问题中得到你的输出而不是在应用程序级别上做,你可以这样做:
SELECT
Team,
COUNT(IF(Task = 'Task_01', 1, NULL)) AS Task_01,
COUNT(IF(Task = 'Task_02', 1, NULL)) AS Task_02
FROM Table1 t
GROUP BY Team
结果:
| TEAM | TASK_01 | TASK_02 |
|--------|---------|---------|
| Team01 | 1 | 0 |
| Team02 | 1 | 1 |