我的表看起来像这样。
+---------+---------------------
| ELEMENT_NAME | ELEMENT_VALUE |
+--------------+---------------+
| NAME | NAME1 |
| Address | Address1 |
| City | City1 |
| NAME | NAME2 |
| Address | Address2 |
| City | City1 |
+-------------------------------
我需要输出类似的东西
+---------+---------------------
| NAME |Address | City |
+--------------+---------------+
| NAME1 | Address1 | City1 |
| NAME2 | Address2 | City2 |
+-------------------------------
注意: - 名称,地址,城市只是一个例子。它可以是任何东西
有人可以帮帮我吗?
答案 0 :(得分:3)
您可以使用GROUP_CONCAT()
:
SELECT ID
,GROUP_CONCAT(CASE WHEN ELEMENT_NAME = 'NAME'
THEN ELEMENT_VALUE ELSE NULL END) AS `NAME`
,GROUP_CONCAT(CASE WHEN ELEMENT_NAME = 'Address'
THEN ELEMENT_VALUE ELSE NULL END) AS `Address`
,GROUP_CONCAT(CASE WHEN ELEMENT_NAME = 'City'
THEN ELEMENT_VALUE ELSE NULL END) AS `City`
FROM Table1
GROUP BY ID;
动态查询(如果您不知道ELEMENT_NAME
的数量或ELEMENT_NAME
太多):
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'GROUP_CONCAT(CASE WHEN `ELEMENT_NAME` = ''',
`ELEMENT_NAME`,
''' THEN ELEMENT_VALUE ELSE NULL END) AS `',
`ELEMENT_NAME`, '`'
)
) INTO @sql
FROM Table1;
SET @sql = CONCAT('SELECT ID, ', @sql,'
FROM Table1
GROUP BY ID
');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
输出:
| ID | NAME | ADDRESS | CITY |
---------------------------------
| 1 | NAME1 | Address1 | City1 |
| 2 | NAME2 | Address2 | City1 |
答案 1 :(得分:0)
只使用ELEMENT_NAME和ELEMENT_VALUE这几乎是不可能的,因为你无法绑定每条记录(即哪个地址与哪个NAME元素相关)。未定义数据库中记录的顺序。