我有一个带有预算用户的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 |
+--------+-----------+----------+----------+----------+----------+
所以我的问题是,如何使用不同的值在同一行中加入答案?
非常感谢!
答案 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.
*您需要向下滚动才能看到输出