小编典典

获取列中的表行

sql

我想从桌子上得到一个特殊的结果,我想找出可能的结果!我有一个像这样的表:(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

怎么可能?

注意:我进行了一些搜索,但没有找到任何东西,如果您知道一个好的关键词,这对我很有用。


阅读 248

收藏
2021-03-08

共1个答案

小编典典

您可以尝试以下查询:

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;

输出:

| IDA |   5 |  6 |      7 |
---------------------------
|   1 |  50 |  0 | (null) |
|   2 | 100 | 12 |      0 |

看到这个SQLFiddle

2021-03-08