SQL脚本使用MYSQL中另一个现有表的值定义表模式

时间:2014-11-20 10:22:47

标签: mysql sql ddl

我在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脚本)。

1 个答案:

答案 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 |