使用类似的值加入MySQL中的行

时间:2016-07-28 17:40:52

标签: mysql concat group-concat

我有一个带有预算用户的MySQL表:

+--------+-----------+----------+----------+
| req_id | name      | id_2     | budget   |
+--------+-----------+----------+----------+
| 1      | User1     | 9        | 10       |
| 1      | User2     | 9        | 100      |
| 1      | User3     | 9        | 1000     |
| 1      | User4     | 9        | 10000    |
| 2      | User1     | 4        | 5        |
| 2      | User2     | 4        | 50       |
| 2      | User3     | 4        | 500      |
| 2      | User4     | 4        | 5000     |
+--------+-----------+----------+----------+

我想要的观点:

+--------+-----------+----------+----------+----------+----------+
| req_id | id_2      | User1    | User2    | User3    | User4    |
+--------+-----------+----------+----------+----------+----------+
| 1      | 9         | 10       | 100      | 1000     | 10000    |
| 1      | 4         | 5        | 50       | 500      | 5000     |
+--------+-----------+----------+----------+----------+----------+

我使用的查询:

SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
    CONCAT(
    'IF(`name` = ''', `name`, ''',budget,0) AS ', `name`)
    ) INTO @sql
    FROM myTable;

SET @sql = CONCAT('SELECT req_id, id_2',
                @sql, 
                ' FROM myTable 
              group by req_id, id_2, name 
              order by req_id, id_2, name');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

这是我迄今取得的成就:

+--------+-----------+----------+----------+----------+----------+
| req_id | id_2      | User1    | User2    | User3    | User4    |
+--------+-----------+----------+----------+----------+----------+
| 1      | 9         | 10       | 0        | 0        | 0        |
| 1      | 9         | 0        | 100      | 0        | 0        |
| 1      | 9         | 0        | 0        | 1000     | 0        |
| 1      | 9         | 0        | 0        | 0        | 10000    |
| 1      | 4         | 5        | 0        | 0        | 0        |
| 1      | 4         | 0        | 50       | 0        | 0        |
| 1      | 4         | 0        | 0        | 500      | 0        |
| 1      | 4         | 0        | 0        | 0        | 5000     |
+--------+-----------+----------+----------+----------+----------+

所以我的问题是,如何使用不同的值在同一行中加入答案?

非常感谢!

1 个答案:

答案 0 :(得分:0)

请试试这个:

SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
    CONCAT(
    'MAX(IF(`name` = ''', `name`, ''',budget,0)) AS ', `name`)
    ) INTO @sql
    FROM myTable;

SET @sql = CONCAT('SELECT req_id, id_2,',
                @sql, 
                ' FROM myTable 
              group by req_id
              order by req_id, id_2, name');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

<强>的变化:

1) MAX(IF(`name` = ''', `name`, ''',budget,0)) AS ', `name`)

2) You needed to group by `req_id` only.

查看 *WORKING DEMO

*您需要向下滚动才能看到输出