Mysql 如何根据值将多行转换为多列
我知道这是重复的,但我很困惑。我不擅长数据库 我知道它可以很容易地从代码处理。但是请求是为了查询,这就是为什么我要走这条路 我通过这个查询得到了如下数据Mysql 如何根据值将多行转换为多列,mysql,database,pivot,Mysql,Database,Pivot,我知道这是重复的,但我很困惑。我不擅长数据库 我知道它可以很容易地从代码处理。但是请求是为了查询,这就是为什么我要走这条路 我通过这个查询得到了如下数据 **SELECT c.CASE_NUMBER,mt.MAIN_TEST_NAME, t.TASK_START, t.TASK_END FROM `CASE` c INNER JOIN MAIN_TEST mt ON c.CASE_ID=mt.CASE_ID INNER JOIN JOB j on c.CASE_ID = j.JOB_ID IN
**SELECT c.CASE_NUMBER,mt.MAIN_TEST_NAME, t.TASK_START, t.TASK_END FROM `CASE` c
INNER JOIN MAIN_TEST mt ON c.CASE_ID=mt.CASE_ID
INNER JOIN JOB j on c.CASE_ID = j.JOB_ID
INNER JOIN TASK t on j.TASK_ID= t.TASK_ID
WHERE (c.CREATION_DATE BETWEEN '2019-01-01 00:00:00' AND CURDATE() )**
CASE NUMBER MAIN TEST TASK_START TASK_END
09232 BX 11/8/2019 14:40 11/8/2019 15:40
09232 FH 11/8/2019 13:35 11/8/2019 15:12
09234 FH 11/6/2019 12:54 11/6/2019 14:54
09234 BX 11/6/2019 11:23 11/6/2019 13:44
我尝试了以下查询
**SELECT c.CASE_NUMBER,
(CASE WHEN mt.MAIN_TEST_NAME='BX' THEN t.TASK_START END) as 'BX_START_DATE',
(CASE WHEN mt.MAIN_TEST_NAME='FH' THEN t.TASK_START END) as 'FH_START_DATE'
FROM `CASE` c
INNER JOIN MAIN_TEST mt ON c.CASE_ID=mt.CASE_ID
INNER JOIN JOB j on c.CASE_ID = j.JOB_ID
INNER JOIN TASK t on j.TASK_ID= t.TASK_ID
WHERE (c.CREATION_DATE BETWEEN '2019-01-01 00:00:00' AND CURDATE() )**
但是在这个查询中,如果条件为true,我不知道如何创建TASK_END列
我想要这种格式的数据
CASE NUMBER BX_TASK_START BX_TASK_END FH_TASK_START FH_TASK_END
09232 11/8/2019 14:40 11/8/2019 15:40 11/8/2019 13:35 11/8/2019 15:12
09234 11/6/2019 11:23 11/6/2019 13:44 11/6/2019 12:54 11/6/2019 14:54
必须对这些大小写表达式进行聚合:
SELECT c.CASE_NUMBER,
MAX(CASE WHEN mt.MAIN_TEST_NAME='BX' THEN t.TASK_START END) as 'BX_TASK_START',
MAX(CASE WHEN mt.MAIN_TEST_NAME='BX' THEN t.TASK_END END) as 'BX_TASK_END',
MAX(CASE WHEN mt.MAIN_TEST_NAME='FH' THEN t.TASK_START END) as 'FH_TASK_START',
MAX(CASE WHEN mt.MAIN_TEST_NAME='FH' THEN t.TASK_END END) as 'FH_TASK_END'
FROM `CASE` c
INNER JOIN MAIN_TEST mt ON c.CASE_ID=mt.CASE_ID
INNER JOIN JOB j on c.CASE_ID = j.JOB_ID
INNER JOIN TASK t on j.TASK_ID= t.TASK_ID
WHERE (c.CREATION_DATE BETWEEN '2019-01-01 00:00:00' AND CURDATE())
GROUP BY c.CASE_NUMBER
在应用中考虑数据显示的处理问题code@Strawberry更新了问题。实际上,查询是我们要求的,而不是代码。我对那个部分感到困惑。如何基于另一个唯一列移动两列