我整天都在这里.我玩了很多MySQL代码,我要么不熟练,要么不擅长编码..
我有一张桌子
name id type amount
=================================
apple 21 cars 67
apple 21 bikes 85
apple 21 skates 557
apple 21 pajs 56
orange 34 bikes 345
orange 34 disks 678
orange 34 cars 234
orange 34 pajs 5678
Run Code Online (Sandbox Code Playgroud)
我想写一个查询,将以这种形式带回表
name id cars bikes skates pajas disks
=========================================
apple 21 67 85 557 56 0
orange 34 234 345 0 5678 678
Run Code Online (Sandbox Code Playgroud)
我真的不知道从哪里开始.很抱歉,如果这是noobie问题,但有时候MySQL很难概念化.
尝试使用 PreparedStatement
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'MAX(ID),MAX(case when type = ''',
type,
''' then amount ELSE NULL end) AS ',
type
)
) INTO @sql
FROM table1;
SET @sql = CONCAT('SELECT name, ', @sql, '
FROM table1 GROUP BY name');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
Run Code Online (Sandbox Code Playgroud)
或者,
SELECT name,
MAX(ID) ID,
MAX(case when type = 'cars' THEN amount ELSE NULL end) AS cars,
MAX(case when type = 'bikes' THEN amount ELSE NULL end) AS bikes,
MAX(case when type = 'skates' THEN amount ELSE NULL end) AS skates,
MAX(case when type = 'pajas' THEN amount ELSE NULL end) AS pajas,
MAX(case when type = 'disks' THEN amount ELSE NULL end) AS disks
FROM table1
GROUP BY name;
Run Code Online (Sandbox Code Playgroud)