Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL转位_Mysql - Fatal编程技术网

MySQL转位

MySQL转位,mysql,Mysql,大家好,新年快乐 我有一个Mysql表,如下所示: date | endpoint | nb200 | nb500 d1 | toto | 11 | 12 d1 | tata | 13 | 14 d1 | tutu | 15 | 16 d2 | toto | 21 | 22 d2 | tata | 23 | 24 d2 | tutu | 25 | 26 date | toto | tat

大家好,新年快乐

我有一个Mysql表,如下所示:

date | endpoint | nb200 | nb500
d1   | toto     | 11    | 12
d1   | tata     | 13    | 14
d1   | tutu     | 15    | 16
d2   | toto     | 21    | 22
d2   | tata     | 23    | 24
d2   | tutu     | 25    | 26
date | toto | tata | tutu
d1   | 11   | 13   | 15
d2   | 21   | 23   | 25
对于每个日期,每个端点都是唯一的,因此我有一个唯一的键(date,endpoint)。日期列是真实的日期,但例如,d1和d2应该很好

现在,我想写一个select请求,向我显示nb200结果,如下所示:

date | endpoint | nb200 | nb500
d1   | toto     | 11    | 12
d1   | tata     | 13    | 14
d1   | tutu     | 15    | 16
d2   | toto     | 21    | 22
d2   | tata     | 23    | 24
d2   | tutu     | 25    | 26
date | toto | tata | tutu
d1   | 11   | 13   | 15
d2   | 21   | 23   | 25
现在,我最好的尝试是

SELECT date,
  (CASE WHEN endpoint = 'toto' THEN nb200 END) AS 'toto',
  (CASE WHEN endpoint = 'tata' THEN nb200 END) AS 'tata',
  (CASE WHEN endpoint = 'tutu' THEN nb200 END) AS 'tutu',
FROM table;
但这不太好,因为我得到以下信息:

date | toto| tata| tutu
d1   | 11  |     | 
d1   |     | 13  |
d1   |     |     | 15
d2   | 21  |     |
d2   |     | 23  | 
d2   |     |     | 25
有人知道怎么做吗?

您需要执行条件聚合:

MAX
用于有选择地获取每个
端点的值

您可以使用(假)聚合函数和分组方式

  SELECT date,
    min(CASE WHEN endpoint = 'toto' THEN nb200 END) AS 'toto',
    min(CASE WHEN endpoint = 'tata' THEN nb200 END) AS 'tata',
    min(CASE WHEN endpoint = 'tutu' THEN nb200 END) AS 'tutu',
  FROM table
 group by date;

您可以按日期分组使用
nb200上的
max
,也可以按
date
min进行分组,并且不使用第二个“END”)“括号,可以正常工作。