我想从桌子上得到一个特殊的结果,我想找出可能的结果!我有一个像这样的表:(idA,idB,val)通过此值:
IDA | IDB | 值 ---- + ------- + ---------- 1 | 5 | 50 1 | 6 | 0 1 | 7 | 空值 2 | 5 | 100 2 | 6 | 12 2 | 7 | 0
我想通过以下格式从此表中进行选择:
IDA | 5 | 6 | 7 ---- + ------- + ------- + ------- 1 | 50 | 0 | 空值 2 | 100 | 12 | 0
怎么可能?
注意:我进行了一些搜索,但没有找到任何东西,如果您知道一个好的关键词,这对我很有用。
您可以尝试以下查询:
SELECT idA ,GROUP_CONCAT(CASE WHEN idB = 5 THEN val ELSE NULL END) AS `5` ,GROUP_CONCAT(CASE WHEN idB = 6 THEN val ELSE NULL END) AS `6` ,GROUP_CONCAT(CASE WHEN idB = 7 THEN val ELSE NULL END) AS `7` FROM MyTable GROUP BY idA
如果您不知道数量,则idB可以使用此动态查询:
idB
SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT( 'GROUP_CONCAT(CASE WHEN `idB` = ''', `idB`, ''' THEN val ELSE NULL END) AS `', `idB`, '`' ) ) INTO @sql FROM MyTable; SET @sql = CONCAT('SELECT idA, ', @sql,' FROM MyTable GROUP BY idA '); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
输出:
| IDA | 5 | 6 | 7 | --------------------------- | 1 | 50 | 0 | (null) | | 2 | 100 | 12 | 0 |