Fetch table rows in columns

微笑、不失礼 提交于 2020-01-14 18:47:12

问题


I want get a special result from my table and i want find out that is possible !? I have a table like this: (idA , idB , val) by this values:

idA |   idB |   val
----+-------+----------
1   |   5   |   50
1   |   6   |   0
1   |   7   |   NULL
2   |   5   |   100
2   |   6   |   12
2   |   7   |   0

I want select from this table by a format like this:

idA |   5   |   6   |   7
----+-------+-------+-------
1   |   50  |   0   |   NULL
2   |   100 |   12  |   0

How it's possible?

Note: I have some searches and find nothing, if you know a good key word it would be useful for me.


回答1:


You can try this query:

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

If you don't know the number of idB you can use this dynamic query:

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 this SQLFiddle




回答2:


you can try with this

   select idA ,
     max(CASE WHEN idB = 5 then val end) as '5',
     max(CASE WHEN idB = 6 then val end) as '6',
     max(CASE WHEN idB = 7 then val end) as '7'
     from Table1
   GROUP BY idA

DEMO HERE

Output:

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


来源:https://stackoverflow.com/questions/18185167/fetch-table-rows-in-columns

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!