我想从我的表中得到一个特殊的结果,并且我想知道这是可能的!?
我有一个像这样的表: (idA , idB , val) 按此值:
idA | idB | val
----+-------+----------
1 | 5 | 50
1 | 6 | 0
1 | 7 | NULL
2 | 5 | 100
2 | 6 | 12
2 | 7 | 0
我想通过这样的格式从此表中进行选择:
idA | 5 | 6 | 7
----+-------+-------+-------
1 | 50 | 0 | NULL
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
您可以使用此动态查询:
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;
Output:
| IDA | 5 | 6 | 7 |
---------------------------
| 1 | 50 | 0 | (null) |
| 2 | 100 | 12 | 0 |
See 这个 SQLFiddle http://sqlfiddle.com/#!2/3930af/1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)